
我正在使用一个数据库,并且有一个列表片段使用游标适配器来查询加载器中的数据库.
当用户长按列表视图项时,他会看到上下文菜单和删除此条目的选项.
当他按下删除时,我启动一个删除此条目的线程,然后再次启动加载器以获取新游标(因为不推荐使用“requery()”).
当加载器完成加载新游标时,我正在尝试使用changeCursor方法,假设@R_767_6419@视图但它没有这样做,所以我尝试使用notifyDataSetChanged,但它也不起作用.
我已经检查过,光标从加载器返回,它确实改变了光标,但是列表视图没有刷新.
我该怎么办?重启片段?
这是一些代码:
case MENU_REMOVE: final AdapterContextMenuInfo info = (AdapterContextMenuInfo)item.getMenuInfo(); mProgress = ProgressDialog.show(getActivity(), getString(R.string.List_remove_progress_Title_text), getString(R.string.progress_dialog_description)); new Thread(new Runnable() { @OverrIDe public voID run() { PlacesHandler wph = new PlacesHandler(getActivity()); wph.DeleteEntry(mPlacename, info.ID); getLoaderManager().initLoader(0, null, ListFragment.this); } }).start(); return(true);完成加载后:
@OverrIDe public voID onl oadFinished(Loader<Cursor> loader, Cursor data) { if(mProgress == null || !mProgress.isShowing()){ ... } else{ mProgress.dismiss(); mAdapter.changeCursor(data); mAdapter.notifyDataSetChanged(); } }谢谢!
解决方法:
谢谢大家,但我发现了我的问题!
从加载器返回的游标与适配器中的游标相同.
这是因为我打电话:
getLoaderManager().initLoader(0, null, this);代替:
getLoaderManager().restartLoader(0, null, this);因为我在创建片段时第一次加载光标时已经使用了ID为0的加载器,它只是立即将光标返回给我.
因此,如果某些人遇到同样的问题并阅读它,只需知道initLoader使用具有指定ID的现有加载器(如果有).如果没有,它会创建一个.
但是如果你想丢弃加载器的旧数据并重新开始,你应该使用restartLoader.
再次感谢任何试图提供帮助的人!
总结以上是内存溢出为你收集整理的android – 在其适配器上使用changeCursor()后,ListView不会刷新全部内容,希望文章能够帮你解决android – 在其适配器上使用changeCursor()后,ListView不会刷新所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)