Android 如何在setViewValue处更新光标?
是否有任何方法可以从Android 如何在setViewValue处更新光标?,android,android-listview,Android,Android Listview,是否有任何方法可以从setViewValue代码手动更新光标的项目值?目前我只是再次获取所有记录,然后changecoursor和notifydatasetchange,但速度非常慢: dbHelper = new DbAdapter(this); dbHelper.open(); recordsCursor = dbHelper.fetchAllRecords(); startManagingCursor(recordsCursor); String[] from = new String[
setViewValue
代码手动更新光标的项目值?目前我只是再次获取所有记录,然后changecoursor
和notifydatasetchange
,但速度非常慢:
dbHelper = new DbAdapter(this);
dbHelper.open();
recordsCursor = dbHelper.fetchAllRecords();
startManagingCursor(recordsCursor);
String[] from = new String[]{DbAdapter.KEY_1, DbAdapter.KEY_2};
int[] to = new int[]{R.id.text1, R.id.background};
adapter = new SimpleCursorAdapter(this, R.layout.row, recordsCursor, from, to);
if (adapter != null) {
adapter.setViewBinder(new SimpleCursorAdapter.ViewBinder() {
@Override
public boolean setViewValue(View view, Cursor cursor, int columnIndex) {
int viewId = view.getId();
switch(viewId) {
case R.id.text1:
final Object item = adapter.getItem(cursor.getPosition());
...
// some logic is here, so the code below is run only when item is displayed for 5 seconds
dbHelper.open();
Boolean result = dbHelper.markRecordAsRead(text); // update the database
...
// the code below works, but since I read the whole database, it is SLOW
dbHelper.open();
recordsCursor = dbHelper.fetchAllRecords();
adapter.changeCursor(recordsCursor);
adapter.notifyDataSetChanged();
// is there any way just to update the cursor's item value?
您可以使用
AsyncTask
在后台执行数据库查询。@AmulyaKhare,是的,但这对我的阅读没有帮助(当然,我也可以在后台阅读,但在我更改光标之前,用户可能会先向下滚动,然后再向上滚动-因此,他/她将看到过时的项目)。