【问题标题】:Android: ListView updates wrongly on database deleteAndroid:删除数据库时 ListView 更新错误
【发布时间】:2013-09-19 16:05:36
【问题描述】:

当我从 sqlite 表中删除一行时,ListView 总是随着删除最后一个条目而更新。重新启动活动时,它会正确反映数据库内容。

这就是我从表中删除一行的方式(mDb 是一个 SQLiteOpenHelper 对象):

mDb.delete(TABLE, COL_ID + "=" + id, null);
mContext.getContentResolver().notifyChange(DB_URI, null);

这就是列表的更新方式(简化)。我已经验证 onLoadFinished() 被调用了。

public class MyActivity extends ListActivity implements LoaderManager.LoaderCallbacks<Cursor> {

…

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.calllist);

        String[] from = new String[] { … };
        int[] to = new int[] { ... };

        notes = new SimpleCursorAdapter(this, R.layout.item, null, from, to, 0){
    }


    public final static class MyCursorLoader extends SimpleCursorLoader {
        final Loader.ForceLoadContentObserver observer = new ForceLoadContentObserver();

        @Override
        public Cursor loadInBackground() {
            Cursor c = mDb.rawQuery(SELECT_ALL, null);
            c.registerContentObserver(this.observer);
            c.setNotificationUri(getContext().getContentResolver(), DB_URI);
            return c;
        }

    }


    @Override
    public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {
        if (loader.getId() == LOADER_ID) {
            notes.changeCursor(cursor);
            notes.notifyDataSetChanged();
        }
    }
}

当我将 notifyChange(DB_URI, null) 调用延迟一秒或更长时间时,我似乎在工作。这应该是必要的吗?有没有其他方法可以解决这个问题?

【问题讨论】:

    标签: android sqlite android-loadermanager android-cursorloader


    【解决方案1】:

    尝试改用 CursorLoader。见Loading Data in the Background

    【讨论】:

    • 那意味着我也必须实现一个 ContentProvider 对吧?
    • CursorLoaders 与 ContentProviders 一起工作......他似乎没有 ContentProvider(他使用的是普通游标)......这就是为什么我认为这不是一个有效的答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    相关资源
    最近更新 更多