3

私は奇妙な問題を抱えています。並べ替えている ArrayAdapter があります。これは私の画面では正しく表示されますが、実際のデータ ソースを確認すると、内容がソートされていません。ListAdapter をソートすると、データ ソースもソートされるようにするにはどうすればよいですか?

Collections.sort(quotes, new PercentChangeComparator()); //sort my data source (this isn't necessary)
quotesAdapter.sort(new PercentChangeComparator()); //sort my ListAdapter
Toast toast = Toast.makeText(getApplicationContext(),quotes.get(0).getSymbol(), Toast.LENGTH_SHORT);
toast.show(); //this shows that my data source hasn't been updated, even though my ListAdapter presents my ListView in the correctly sorted order.

例: データ ソースが[10,9,1,20]

並べ替えた後、ListView が表示されます[1,9,10,20]

ただし、データ ソースは引き続き[10,9,1,20]

どうすればこれを解決できますか?

4

1 に答える 1

4

逆です。データ ソースを並べ替えると、ArrayAdapter が並べ替えられます。

私はあなたが以前にこのようなことをしたと仮定します。

ArrayList<PercentChangeComparator> quotes = getQuotesFromSomewhere();
QuotesAdapter quotesAdapter = new QuotesAdapter(this, R.layout.xxx, quotes);

次に、引用符をソートした場合、データセットが変更されたことをアダプターに通知すると、リストがソートされます

Collections.sort(quotes, new PercentChangeComparator());
quotesAdapter.notifyDataSetChanged();

これは私のために働いています、私はそれが役立つことを願っています.

1 つの重要な点: ソース配列 (この特定の例では引用符) を再作成すると、アダプターはそれ以上の変更を読み取れません。したがって、ListView のコンテンツを変更する必要がある場合は、次のようにします。

quotes.clear();
quotes.add(...);
quotes.add(...);

また、コンパレータが正しく実装されていることを確認してください。これを実行すると

Collections.sort(quotes, new PercentChangeComparator());

引用符がソートされていない場合、問題はアダプターではなく比較に関係しています。

于 2010-09-14T09:38:08.377 に答える