0

ListViewAndroid は初めてで、データベースからエントリを削除した後に a を更新する際に問題が発生しています。

私の活動では、各行ListViewに複数の選択肢があります。checkboxesユーザーが削除ボタンを押した後、deleteName()呼び出されます。deleteName()は、 でチェックされたすべての名前を削除しますListView。名前はデータベースから削除されますが、ListView更新されることはありません。

使ってみadapter.notifyDataSetChanged()ましたが何も起こりません。ListView更新しないのはなぜですか?

public void deleteName() {

    NamesDataSource datasource = new NamesDataSource(this);
    datasource.open();

    ListView listView = (ListView) findViewById(android.R.id.namelist);
    SparseBooleanArray checked = listView.getCheckedItemPositions();

    List<Name> values = datasource.getAllNames();
    ArrayAdapter<Name> adapter = new ArrayAdapter<Name>(this, android.R.layout.simple_list_item_multiple_choice, values);

    for (int i = 0; i < checked.size(); i++) {
        int position = checked.keyAt(i);
        if (checked.valueAt(i))
            datasource.deleteName(adapter.getItem(position));
    }

    adapter.notifyDataSetChanged();
    setListAdapter(adapter);
    datasource.close();

}
4

3 に答える 3

1

delete メソッドを呼び出すたびに新しいアダプターを作成しているため、コードは最適ではありません。アダプターへのアクティビティ全体の参照を維持する必要があります (おそらく「OnCreate」内)。

リストビューが更新されない理由は、アダプターに値を入力しているが、削除されたものを削除していないためです。

例えばあなたは

datasource.deleteName(adapter.getItem(position));

しかし、対応するものはありません

adapter.remove(name);
于 2013-01-25T07:20:39.333 に答える
0

これを試して

listView.inValidate():
于 2013-01-25T07:02:30.037 に答える
0

adapterクリアする前に値を追加しているため、それが起こっていますdatabase

adapterの値をクリア/削除した後に値を追加してdatabaseから呼び出すadapter.notifyDataSetChanged();

これが役立つかどうか教えてください

于 2013-01-25T07:02:55.227 に答える