这个应用程序应该有四个或更多的相关微调器,当它们的“父”微调器选择发生变化时应该重新加载-例如有两个微调器:房子和房间-如果你选择一个房子,房间微调器应该从sqlite数据库重新加载。
我尝试了两种方法: 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");
}哪些后台任务是查询sqlite数据库的AsyncTask:
@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文件中创建所有微调器。第二种方法让我为所有4个或更多微调函数实现一个AsyncTask,并根据谁使用什么值调用数据库来选择要从数据库查询什么。
第一种方法在异步任务中唯一的“真正”代码行崩溃,第二种方法在异步任务中使用自动设置微调和乱七八糟的if让我抓狂。
我无论如何都不是一个程序员,我想知道是否有人精通面向对象编程,可以告诉我什么是好的编码行为来解决我的特定问题(几个在选择时相互更新的微调工具)。
发布于 2011-06-30 00:17:26
这很有趣,此时此刻我正在做类似的事情。只需保留对适配器的引用,并在onItemSelected内部使用adapter.getItem(pos)访问对象。然后,您可以使用此对象来更新第二个微调器适配器。只需关注UI线程。我想用一种更干净的方式来做这件事,但我不知道该怎么做。
https://stackoverflow.com/questions/6155809
复制相似问题