2

notifyDataSetChanged(); を呼び出すことができることは知っています。このコンテキストでそれをどのように行いますか?それは可能ですか?

        ListView listView = getListView();
        listView.setTextFilterEnabled(true);
        setListAdapter(new ArrayAdapter<String>(Items.this, R.layout.list, items));

編集:以下の提案の1つに変更しました。これが私がやっていることです:

    protected void onPostExecute(Void v) {

        adapter = new ArrayAdapter<String>(Items.this, R.layout.list, items);
        setListAdapter(adapter);

        adapter.notifyDataSetChanged();

    }

ここでは、AsyncTask メソッド内でリフレッシュしています。これは、ListLiew の上に [送信] ボタンがあるダイアログ内で呼び出されています。ダイアログは新しいデータをデータベースに挿入します。リストを更新して、これを反映させたいと思います。ダイアログのボタンのonClickの上と内部でこのコードを試しました。ダイアログが閉じられる直前。

4

3 に答える 3

0

ArrayAdapter自分で初期化する必要があります。

ArrayAdapter<String> adapter = new ArrayAdapter<String>(Items.this, R.layout.list, items);
setListAdapter(adapter);

...それからそれを呼びなさいnotifyDataSetChanged()

adapter.notifyDataSetChanged();

このメソッドを呼び出す必要があるのは、データが実際に変更された場合のみであることに注意してください。この場合、後でアクセスできるように、クラスにメンバー変数として格納する必要があります。

于 2012-06-20T23:17:40.723 に答える
0

ArrayAdapter は BaseAdapter を拡張するため、ArrayAdapter で notifyDataSetChanged() を呼び出すことができるはずです。

http://developer.android.com/reference/android/widget/ArrayAdapter.html

あなたの例では、 listView.setListAdapter() を呼び出すつもりだったと仮定して、このようなことをします

(ArrayAdapter)listView.getAdapter()).notifyDataSetChanged();
于 2012-06-20T23:20:38.803 に答える
0

あなたの例では、アダプタを設定しないでくださいAsyncTask。通常、これを行うことをお勧めします。そうしないと、呼び出されるonCreate()たびに設定することになります。AsyncTaskアダプターをメンバー変数にすると<adapter>.notifyDataSetChanged()AsyncTask.

于 2012-06-20T23:54:10.870 に答える