2011-05-27 53 views
1

這個應用程序應該有四個或更多相關的spinners,當它們的'父'spinner'選擇改變時應該重新加載 - 以2個spinners爲例:房屋和房間 - 如果您選擇房屋,房間微調員應重新加載來自sqlite數據庫。相關Spinners

我已經嘗試了兩種方法:一MySpinner類,它在其構造一個「孩子」微調並告訴孩子自我更新OnSelectedItem被觸發時,像這樣

public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) { 
    if (MySpinner.this.mChild.equals(null) == false) { 
     MySpinner.this.mChild.updateData((int)id);    
     } 
    } 

孩子的了updateData是

public void updateData (int parentValue) { 
    new backgroundTask().execute("create"); 
} 

其後臺任務是的AsyncTask查詢SQLite數據庫:

@Override 
protected Void doInBackground(String... params) { 
    Db = new MyDatabase(mContext); 
    Db.open(); 
    if(params[0] == "create") { 
     if (mTable.equals("T_room")){        
      mCursor = mDb.getRooms(mParentValue); 
     } 
    } 
    return null; 
} 

我的第二種方法是直接在activity.java文件中創建所有我的spinners。第二種方法是我爲所有4個或更多的spinners實現一個AsyncTask,並根據誰調用什麼值來選擇從db中查詢什麼。

第一種方法在asynctask中唯一的'真正'代碼行中崩潰,第二種方法使我瘋狂地使用autosetting spinners和asynctask中的一堆ifs。

我不是任何一種編碼器,也不知道是否某個精通面向對象編碼的人能夠啓發我什麼是解決我的特定問題的良好編碼行爲(幾個在選擇上更新對方的紡紗器)

回答

0

這很有趣,在這一刻我正在做類似的事情。只需保留對適配器的引用,並在onItemSelected內部使用adapter.getItem(pos)訪問該對象。然後,您可以使用此對象更新第二個微調控制器適配器。只需照顧UI線程。我想以更清潔的方式來做到這一點,但我不知道該怎麼做。