我使用自定义ContentProvider
在android中插入和查询sqlite数据库。当我查询数据库时,我在listview上填充数据。但问题是当我插入我想要更新列表视图的行时。
我通过扩展CursorAdapter
并收听LoaderManager.LoaderCallbacks<Cursor>
来创建自定义适配器,现在当我通过context.getContentResolver().insert()
函数插入行时,我想更新列表视图。
我在插入行后尝试了adapter.notifyDataSetChanged();
但是listview没有得到更新。
我看到的唯一选项是restartLoader()
是否还有其他人可以更新列表视图?
这是我的插入代码
context.getContentResolver().insert(
ContentUris.withAppendedId(
Uri.withAppendedPath(Columns.CONTENT_URI,
Columns.INSERT_LOGS ),
Columns.LOGS),
values);
我正在插入应用程序的日志并显示到listview
这是内容提供商内部的代码
if(rowId > 0 ){
Uri insertUri = ContentUris.withAppendedId(Columns.CONTENT_URI, rowId);
Log.e("inserted " , rowId+"");
getContext().getContentResolver().notifyChange(insertUri,null);
return insertUri;
}
答案 0 :(得分:1)
我认为,你可以看到它是如何运作的this example,因为它也基于Loaders
。
我遇到了像你这样的麻烦,问题出在我身上。
这是对的。
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {
...
adapter.swap(cursor)
dataAdapter.notifyDataSetChanged();
listView.SetAdapter(dataAdapter);
...
}