2011-11-21 150 views
5

嘿,我使用列表视图来演示存储在数据库中的条目。我还有一个EditText元素和一个将EditText的内容添加到数据库中的按钮。要将视图绑定到我使用SimpleCursorAdapter和下面填入功能的数据库内容:使用SimpleCursorAdapter更新Android ListView

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); 
} 

如果我增加了一个新的项目,通过点击按钮,我想刷新列表视图但这只是与填入功能的工作原理而不是使用通用适配器功能notifyDataSetChanged();。我有错误还是这是刷新列表视图的正确方法?

回答

8

你见过this,试过swap cursor的方法,还是试图只是简单地再次调用setAdapter()

我有一个类似的问题,我无法让我的列表更新,我所做的只是创建一个refreshListView()方法。现在,您可以从onCreate()开始调用此函数,并且可以随时向用户数据库添加一些内容。它所做的就是将listview重新绑定到游标。通过所有的废弃方法(requery())和notifyDataSetChanged()的问题,我决定这是最简单的方法。

+0

只需提一下:'repery()'已被弃用。 [Documentation](http://developer.android.com/reference/android/database/Cursor.html#requery())对此有清晰的记录。 – 87element

+0

我知道了,我没有把这句话说得很对,重新措辞它:> – Jack

+0

嘿杰克感谢您的回复,我发现我忘了说上面的代码是我的'populate()'函数,我称它为我的'onCreate()'方法,如果我点击“添加”按钮。我只想知道这是否是调用此方法而不是调用基本适配器类的通用'notifyDataSetChanged()'方法的好方法。 –

2

请参考此链接...它就像魅力

Update SimpleCursorAdapter while maintaining scroll position in ListView

动态列表视图上滚动我从数据库中添加新项... 我确实错在这里.. 我被分配新的适配器每次为同一个simplecursoradapter。 而不是创建新的适配器。 只是用

adapter.changecursor(newcursorValue); 
adapter.notifydatasetChanged(); 
lsMedicine1.setSelectionFromTop(lsMedicine1.getLastVisiblePosition()-20, 0); 
1

您需要notifyDataSetChanged()适配器上之前调用swapcursor()

相关问题