2011-05-27 54 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线程。我想以更清洁的方式来做到这一点,但我不知道该怎么做。