通过内容提供商插入行后更新列表视图

时间:2014-10-08 18:48:08

标签: android listview android-listview android-contentprovider

我使用自定义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;

            }

1 个答案:

答案 0 :(得分:1)

我认为,你可以看到它是如何运作的this example,因为它也基于Loaders

Please take a look at it too.

我遇到了像你这样的麻烦,问题出在我身上。

这是对的。

@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {
    ...
    adapter.swap(cursor)
    dataAdapter.notifyDataSetChanged();
    listView.SetAdapter(dataAdapter);
    ...
}