引言
我有一个应用程序,它包含一个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);
答案 0 :(得分:2)
请致电:
mCursorAdapter.notifyDataSetChanged();
对基础数据进行更改后。
此外,我建议您重命名getAdapter()
方法,因为它有一个误导性名称恕我直言。我希望它总是返回相同的适配器,而你似乎用它来初始化一个新的适配器。
答案 1 :(得分:1)
chech this链接,用于notifyDataSetChanged示例。其中包含答案,如何使用,何时使用。 &安培;如何使用。希望这可以帮助。