更新列表视图

Update ListView

我从数据库接收到游标并设置和适配到 ListView。然后我向数据库插入新行,但我的 ListView 没有更新。

Cursor c = getContentResolver().query(GEN_URI, null, null, null, null);

String[] from = { DB.column_name };
int[] to = { R.id.textViewItem };

myAdapter = new SimpleCursorAdapter(this, R.layout.shop_list_item, c, from, to, SimpleCursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER );
 
ShopList.setAdapter(myAdapter);

ContentValues newC = new ContentValues();
newC.put(DB.column_name, "Селёдочка");
Uri uri = getContentResolver().insert(SHOP_LIST_URI, newC);
getContentResolver().query(GEN_URI, null, null, null, null);
myAdapter.notifyDataSetChanged();

如果我设置标志 SimpleCursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER - ListView 不更新。 如果我设置标志 SimpleCursorAdapter.FLAG_AUTO_REQUERY- ListView update.

做什么?

您必须通知适配器数据已更改并告诉它刷新。

adapter.notifyDataSetChanged();

当使用标志 autorequery 时,游标会自动重新查询,因此,您的列表视图正在更新,但据我所知,此 FLAG_AUTO_REQUEY 现在已弃用。

更新

经过一些谷歌搜索,我发现 notifyDataSetChanged 与 SimpleCursorAdapters 无关。

因此解决方法是 requers()。但正如我所说,它已被弃用,新方法是通过更改光标。

adapter.changeCursor(cursor) and send it to your adapter.

这里是 google 关于 requery() 的官方文档。

你可以试试myadapter.notifyDataSetChanged();