ListFragment不会刷新

时间:2013-02-28 20:01:30

标签: android contextmenu fragment

这里是我的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;
            }
        };
    }

1 个答案:

答案 0 :(得分:0)

你不仅不需要在适配器上的LoaderManager 上进行notifyDataSetChanged的重置,你真的不应该 。正确的方法是确保fetchPlantRelations()返回的游标已经注册了特定URI上的通知。如果你这样做是因为对底层数据集的更改(如deletePlantRelation导致的那些)通知该URI,其余的将完全自动发生。看看这里的代码:

https://github.com/marakana/yamba/blob/yambaII/YambaService/src/com/marakana/android/yamba/svc/data/YambaProvider.java

尤其要注意第182和242行。那就是它的全部内容。