1

データベースに追加した後、データベースから更新しようとしている ListView があります。

データがリストに取り込まれ、ListView にも取り込まれている間、ListView はリスト内のアイテムの数を更新していません。

したがって、リストが {1, 3, 6, 8, 12} の場合、リストに 4 を追加して並べ替えた後、リスト ビューには {1, 3, 4, 6 ,8} と表示され、6 番目のアイテム 12 は表示されません。

リストにさらに項目を追加すると、この問題は複雑になります。別の項目を追加しても、この ListView には最初の 5 つしか表示されません。

問題のあるコード領域は次のとおりです

TourGroup group = data.getParcelableExtra(TOURGROUP);

DatabaseHandler db = new DatabaseHandler(this);
db.addGroup(group);

mainList = db.getAllGroups();

db.close();

Collections.sort(mainList, new CustomComparator());

ListView groupList = (ListView) findViewById(R.id.groupList);
ArrayAdapter adapter = (ArrayAdapter) groupList.getAdapter();
adapter.notifyDataSetChanged();

交換したら

mainList = db.getAllGroups();

mainList.add(group);

その後、ListView は正しく更新されます。しかし、これはデータベースからリストビューを更新しないため、私が望む解決策ではありません。

私はこの問題に何時間も頭を悩ませてきました。

4

1 に答える 1

3

しかし、これはデータベースからリストビューを更新しないため、私が望む解決策ではありません。

あなたArrayAdapterはいくつかを包み込んでいArrayListます。それが何であれ、それはによって返されるArrayListものではありません。そこで、あなたが新しい を作成したに違いありません。その場合、データベースに加えた変更についてはわかりません。ArrayListgetAllGroups()ArrayListArrayAdapterArrayList

また:

  • 既存の を更新するArrayList、または

  • add(), addAll(), clear(),insert() ,remove() , and/orsort() on yourArrayAdapter (which also saves you the trouble of callingnotifyDataSetChanged()` を使用するか、

  • ArrayAdapterあなたの新しいもののために新しいものを作成し、ArrayList新しいArrayAdapterものをあなたのListView

于 2013-07-11T21:52:18.843 に答える