我有这个cursorAdapter,我为其定义了一个新对象。一旦声明了对象'itemAdapter',我就会得到从bindView方法加载到数组中的所有字符串的名称(Names)。
@Override
protected void onActivityResult(int arg0, int arg1, Intent arg2) {
// TODO Auto-generated method stub
Log.d("success", "On activity result");
super.onActivityResult(arg0, arg1, arg2);
if(arg1==RESULT_OK){
db=new DatabaseControl(this);
db.open();
CategoryCursorAdapter itemAdapter=new CategoryCursorAdapter(this, db.getItemCursor(-1), CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER, "item_name",1,db);
iFrag.getListView().setAdapter(itemAdapter);
Log.d("success", String.valueOf(itemAdapter.Names.size()));
}
}
问题是系统在'itemAdapter'的解除之前执行'log.d'(最后一行)命令。由于'Names'数组仅在声明itemAdapter后填充值,因此logcat将Names数组的大小显示为0。
我已经确认,一旦声明了itemAdapter,names数组就不会为空。
请帮助!!!!
答案 0 :(得分:0)
您的代码中有几个错误的问题
如果可能,数据库操作应该是异步的,带有回调,您可以在其中设置适配器内的内容 也许在你的情况下,它们是异步的,因为你没有告诉我们“getItemCursor(-1)”是什么
如果db操作是异步的,那么
启动异步请求,代码继续运行,有时候结果出现,它会被设置为适配器
这个代码可能仍然有用的原因是因为itemAdapter被保存在内存中,因为你的listview有一个对它的引用,一旦它更新(以及你将使用notifyDataSetChanged的某个地方),因为对itemAdapter的引用仍然存在,它将更新您的列表视图
如果你看看加载器回调(那些旨在异步加载游标的回调),这就是他们做的事情
使用空游标创建适配器,当光标加载完毕后,交换光标