2

アクティビティに ListView があり、onCreatebyで設定されています

    MyCursorAdapter adapter = new TaskConditsCursorAdapter(this, conditsCursor, taskID, isNewTask);
    setListAdapter(adapter);

次に、でいくつかの作業を行いMyCursorAdapterます。とりわけ、行固有の AlertDialog があります。

...
    builder.setPositiveButton("OK"), new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int item) {
            changeTaskConditBoolValue(taskId, conditId, chosenBoolValue2);
            // refresh?
        }
    });

このメソッドはデータベース内の何かを変更したため、リストをリロードしchangeTaskConditBoolValueたいのですが、リストは更新されませんでした。requery()リストが空になります。どうすれば "1 レベル上" にadapter戻って作業できますか? その場合はどうすればよいですか?

どうもありがとう!

4

4 に答える 4

6

によって呼び出されるMyCursorAdapterメソッド内でonClick- 私の場合、changeTaskConditBoolValue(...)呼び出す必要があるのは次のとおりです。

this.changeCursor(db.fetchAllTasks(myParameters));

これにより、データベースクラスによって新しいカーソルが取得され、独自の古いカーソルが新しいカーソルに置き換えられます。

CursorAdapter 内からカーソルを変更する他の方法は見つかりませんでした。

于 2011-08-31T10:45:45.560 に答える
4

電話するだけ

adapter.notifyDataSetChanged();

ドキュメント:こちら

于 2011-04-17T19:36:46.540 に答える
1

アダプタの requery() を呼び出すことが唯一の解決策です。

ただし、メソッド requery() は非推奨です。そのため、LoaderManager と Loader を使用できます。

于 2013-10-30T06:24:32.043 に答える
0

これは私にとってうまくいくものですが、それが最善の方法かどうかはわかりません。

c = db.rawQuery( "SELECT * FROM mytable", null); //same line of the initial initialization
adapter.swapCursor(c);

唯一のカーソルを更新しますが、新しいカーソルをどうするかわかりません。

于 2014-08-29T04:47:09.433 に答える