0

概要:アイテム (ここでは顧客) のリストを表示するアクティビティを備えた簡単なアプリケーション (デモ/プロトタイプ) があります。項目は、アプリケーションの SQLite データベースから取得されます。私はとのContentProviderアプローチを使用しています。ユーザーによるメニュー項目の選択を、選択したリストの並べ替え方法に変換する必要があります。それを行う通常の方法は何ですか?そのユーザー選択を将来のためにどのように保存する必要がありますか? (私はAndroidプログラミングに関して初心者です。)LoaderManagerSimpleCursorAdapter

詳細:私のアクティビティonCreateメソッドでは、fillDataメソッド (チュートリアルから学んだ以下のコードを参照) が呼び出されて、リストにデータが入力されます。を呼び出すと、インスタンスを返すgetLoaderManager().initLoader(0, null, this);が呼び出されます。カーソル ローダーはコンテンツ プロバイダーを使用し、並べ替えを定義する引数も渡します。これまでのところ、リストのソートには固定引数を使用しています。私の推測では、メニュー項目のクリックを処理するときに を呼び出す必要があります。別のローダーと別のアダプターを作成する必要があります。しかし、どのように情報をに渡す必要がありますか?onCreateLoaderCursorLoaderfillData();onCreateLoader

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case R.id.insert_customer:   // this already works for me
        createCustomer();
        return true;

    case R.id.customers_orderby_name_asc:
        ???                      // What should be here?
        fillData();              // I should probably call this.
        return true:

    case R.id.customers_orderby_name_desc:
        ???
        fillData();
        return true:
    }
    return super.onOptionsItemSelected(item);
}
...
private void fillData() {
    String[] from = new String[] { CustomerTable.COLUMN_CODE,
                                   CustomerTable.COLUMN_NAME,
                                   CustomerTable.COLUMN_TOWN,
                                   CustomerTable.COLUMN_STREET};
    int[] to = new int[] { R.id.code, R.id.name, R.id.town, R.id.street };

    getLoaderManager().initLoader(0, null, this);
    adapter = new SimpleCursorAdapter(this,
            R.layout.customer_row, null, from, to, 0);
    setListAdapter(adapter);
}

// After initLoader()...
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
    String[] projection = { CustomerTable.COLUMN_ID,
                            CustomerTable.COLUMN_CODE,
                            CustomerTable.COLUMN_NAME,
                            CustomerTable.COLUMN_STREET,
                            CustomerTable.COLUMN_TOWN };
    CursorLoader cursorLoader = new CursorLoader(this,
            DemoContentProvider.CUSTOMERS_CONTENT_URI, projection, null, null,
            CustomerTable.COLUMN_NAME);  // here fixed order by the column
    return cursorLoader;
}
4

2 に答える 2

1

アクティビティ内のローカル変数にすることができます。

後で使用するために (またはすぐに使用するために)、列名を SharedPrefs に書き込むことができます。

アクティビティの外のクラスに移動するLoaderCallbacksと、それを実装のフィールドにLoaderCallbacksして、コンストラクターまたはセッターで渡すことができます。

于 2013-04-26T12:24:18.383 に答える