ListFragment不刷新

时间:2014-02-17 09:50:33

标签: android database list

引言

我有一个应用程序,它包含一个Acitivity,我创建了一些元素,然后我将这些元素保存在ListFragment上。这个东西工作正常,但是当我尝试从列表中删除一个元素时就会出现问题。

简单地说,删除元素时listFragment不会刷新。如果我回到主Activity然后再次进入ListFragment,那么我删除的元素不会出现,但是在我删除元素的那一刻就是刷新这个列表。

不得不说我有点困惑,因为起初,它做得对,但我不知道我触摸到了什么,现在却没有。

CODE

这是ListFragment的相关代码片段:

public class MyPlacesListFragment extends ListFragment {
//...

    final class PlacesCursorAdapter extends ResourceCursorAdapter {
    //...

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        getAdapter();
    }

    public void getAdapter() {

        Cursor c = getActivity().getContentResolver().query(PlacesProvider.CONTENT_URI, PROJECTION, null, null, null);

        mCursorAdapter = new PlacesCursorAdapter(getActivity(), c);
        setListAdapter(mCursorAdapter);
    }

    private void deleteItem(long id){

            Uri uri = ContentUris.withAppendedId(PlacesProvider.CONTENT_URI, id);
            getActivity().getContentResolver().delete(uri, null, null);
    }

我不得不说我使用的是dataBase和ContentProvider,但这些工作正常,我已经用其他应用程序对它们进行了测试。

另外,我以这种方式对Provider的Insert,Update和Delete方法调用notifyChange():

getContext().getContentResolver().notifyChange(uri, null);

2 个答案:

答案 0 :(得分:2)

请致电:

mCursorAdapter.notifyDataSetChanged();

对基础数据进行更改后。

此外,我建议您重命名getAdapter()方法,因为它有一个误导性名称恕我直言。我希望它总是返回相同的适配器,而你似乎用它来初始化一个新的适配器。

答案 1 :(得分:1)

chech this链接,用于notifyDataSetChanged示例。其中包含答案,如何使用,何时使用。 &安培;如何使用。希望这可以帮助。