嘿,我使用listview来显示存储在数据库中的条目。我还有一个EditText元素和一个按钮,它将EditText的内容添加到数据库中。要将视图绑定到数据库内容,我使用SimpleCursorAdapter并使用populate函数:
private void populate() {
cursor = dbAdapter.getAllItems();
startManagingCursor(cursor);
String[] from = new String[] { DBAdapter.KEY_TASK };
int[] to = new int[] { android.R.id.text1 };
// Now create an array adapter and set it to display using our row
cursorAdapter = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_1, cursor, from, to);
list.setAdapter(cursorAdapter);
}
如果我添加了一个新条目,通过单击我要刷新列表视图的按钮,但这仅适用于populate函数,而不适用于公共适配器函数notifyDataSetChanged();
。我有错误或者这是刷新列表视图的正确方法吗?
答案 0 :(得分:9)
您是否看过this,尝试过swap cursor方法,或者只是尝试再次呼叫setAdapter()?
我有一个类似的问题,我无法让我的列表更新,我所做的只是创建一个refreshListView()方法。现在你可以从你的onCreate()开始调用它,并在用户向数据库添加内容时随时调用。它只是将listview重新绑定到游标。使用所有弃用方法(requery())以及notifyDataSetChanged()的问题,我认为这是最简单的方法。
答案 1 :(得分:2)
请参考此链接......它的功能就像魅力一样
Update SimpleCursorAdapter while maintaining scroll position in ListView
对于动态列表视图滚动我从数据库中添加了新项目.. 我在这里弄错了.. 我为同一个simplecursoradapter每次分配新的适配器。 而不是创建新的适配器。 只需使用
adapter.changecursor(newcursorValue);
adapter.notifydatasetChanged();
lsMedicine1.setSelectionFromTop(lsMedicine1.getLastVisiblePosition()-20, 0);
答案 2 :(得分:1)
您需要在适配器swapcursor()
之前调用notifyDataSetChanged()
。