这里是我的ListFragment中的代码(我正在使用上下文菜单):
@Override
public boolean onContextItemSelected(MenuItem item) {
AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item
.getMenuInfo();
Log.d(TAG, "onContextItemSelected clicked");
long id = info.id;
Log.d(TAG, "list id " + id);
int menuItemIndex = item.getItemId();
Log.d(TAG, "menuItemIndex " + menuItemIndex);
if (menuItemIndex == 0) {
try {
plantManager.deletePlantRelation(id);
CharSequence text = getActivity().getString(
R.string.info_could_delete_plant);
Toast toast = Toast.makeText(getActivity(), text,
Toast.LENGTH_LONG);
toast.show();
loader = getLoaderManager().restartLoader(0, null, this);
myAdapter.notifyDataSetChanged();
} catch (Exception ex) {
ex.printStackTrace();
CharSequence text = getActivity().getString(
R.string.info_could_not_delete_plant);
Toast toast = Toast.makeText(getActivity(), text,
Toast.LENGTH_LONG);
toast.show();
}
}
return true;
}
执行该方法,我收到Toast-Message - 但List不会刷新。
期待你的帮助。
提前致谢!
更新
public Loader<Cursor> onCreateLoader(int arg0, Bundle arg1) {
return new CursorLoader(getActivity()) {
@Override
public Cursor loadInBackground() {
myCursor = plantManager.fetchPlantRelations();
return myCursor;
}
};
}
答案 0 :(得分:0)
你不仅不需要在适配器上的LoaderManager 和上进行notifyDataSetChanged的重置,你真的不应该 。正确的方法是确保fetchPlantRelations()返回的游标已经注册了特定URI上的通知。如果你这样做是因为对底层数据集的更改(如deletePlantRelation导致的那些)通知该URI,其余的将完全自动发生。看看这里的代码:
尤其要注意第182和242行。那就是它的全部内容。