0

私は SQLite DB からのデータを表示するアプリを持っており、データは常に変化しているため、明らかに、LoaderManager を使用してデータを表示する必要があると考えました。

SQLite で LoaderManager を使用することについて少し読んで、 CursorLoader の実装と使用に関するAlex Lokwood の回答を見ました。また、ContentProvider の代わりに CursorLoader を SQLite DB に直接使用することに関するこの回答を見て、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」から変更されたときに始まります。

基本的に私が探しているのは、データベースの変更をリアルタイムで監視することですが、そうです(また、dbを再クエリしたいときに関数を呼び出す必要があるAndroidドキュメントから)。restartLoader

舞台裏で再クエリを自動化する方法はありますか?

アップデート:

私の最初の考えは、次のようなローダーを再起動する関数を作成することでした:

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

しかし、それは下手で、これを行う最善の方法ではないようです。

4

1 に答える 1

0

問題は、アクティビティがまだ実行されている間にデータベースが「BroadcastListener」から変更されたときに始まります...舞台裏で再クエリを自動化する方法はありますか?

、、、およびメソッドをBroadcastReceiver使用して、データベースを変更します。その後、自動的に再ロードされます。insert()update()replace()delete()SQLiteCursorLoaderCursor

于 2012-11-20T12:31:16.713 に答える