0

我有一个显示来自 SQLite DB 的数据的应用程序,并且数据不断变化,所以很明显,我认为我应该使用 LoaderManager 来显示数据。

我是否阅读了一些关于将 LoaderManager 与 SQLite 结合使用的信息,并看到了Alex Lokwood关于实现 CursorLoader 并使用它的答案,我看到了关于将 CursorLoader 直接用于 SQLite DB 而不是 ContentProvider 的答案,并开始使用 commonsware 的Loaderex

我创建了这个类来在 ListView 中显示数据:

public class LandingPageActivity extends FragmentActivity implements LoaderCallbacks<Cursor> {
    ListView list;
    SimpleCursorAdapter mAdapter;

    private SQLiteCursorLoader loader = null;
    private Context mContext;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.fragment_friends_and_threads);
        list = (ListView) findViewById(R.id.list);
        mContext = LandingPageActivity.this;

        mAdapter = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_1, null,
                new String[] { Properties.Title.columnName }, new int[] { android.R.id.text1 }, 0);

        list.setAdapter(mAdapter);
        getSupportLoaderManager().initLoader(0, null, this);
    }

    @Override
    public Loader<Cursor> onCreateLoader(int arg0, Bundle arg1) {
        Context c = mContext;
        String query = "SELECT * FROM TABLE_NAME";
        SQLiteOpenHelper db = DatabaseHelper.getDatabase();
        loader = new SQLiteCursorLoader(c, db, query, null);
        return loader;
    }

    @Override
    public void onLoadFinished(Loader<Cursor> arg0, Cursor arg1) {
        mAdapter.changeCursor(arg1);
    }

    @Override
    public void onLoaderReset(Loader<Cursor> arg0) {
        mAdapter.changeCursor(null);
    }
}

当活动仍在运行时从“BroadcastListener”更改数据库时,问题就开始了。

基本上我正在寻找的是实时观察数据库更改,但它似乎(也来自Android文档restartLoader,当我想重新查询数据库时我需要调用该函数)。

有没有办法在幕后自动重新查询?

更新:

我最初的想法是创建一个重新启动加载程序的函数,如下所示:

public static void restartLoader(Context context){
    context.getSupportLoaderManager().restartLoader(0, null, LandingPageActivity.this);
}

但这似乎很粗鲁,并不是最好的方法。

4

1 回答 1

0

当活动仍在运行时从“BroadcastListener”更改数据库时,问题就开始了......有没有办法在幕后自动重新查询?

使用BroadcastReceiverinsert()update()和方法修改数据库replace()。然后,将自动重新加载。delete()SQLiteCursorLoaderCursor

于 2012-11-20T12:31:16.713 回答