1

オブジェクトのリストを表示するための ArrayAdapter を持つ ListFragment があります。ListFragment の内容を更新したい。項目自体のテキストが少し変更され、順序も変更されます。私は 100 を超えるアイテムを持っていますが、これを行う唯一の方法は、リストをクリアして再度追加することですが、これは効率が悪いと感じています。

例えば:

ListFragment 表示順不同:

Object A
Object D
Object F
Object B
Object E
Object C

ListFragment の表示順序:

Object A
Object B
Object C
Object D
Object E
Object F

ArrayAdapter を次のように設定しました。

mAdapter = new ArrayAdapter<Store>(mContext,
    android.R.layout.simple_list_item_1,
    OtherClass.list);
mAdapter.setNotifyOnChange(true);
setListAdapter(mAdapter);

「その他のクラス」は次のとおりです。

public class OtherClass extends Object {

    public ListArray<Object> list;
    ...
}

問題のコード:

mAdapter.clear();
for (Object o : list) {
    mAdapter.add(store);
}

それがどのように機能し、どのように使用するかについて、私はすでに多くの回答を読みましたmAdapter.notifyDataSetChanged()が、どれも私の問題を解決したり、私の質問に答えたりするものではありません. リストに何かを追加/削除することによってリストを更新する唯一の方法はありますか?

4

2 に答える 2

2

listView のように、アダプターをアタッチするものは何でも、それを null または他の何かに設定することでアタッチを解除できます。

したがって、問題のコードの代わりに:

1)。リストを並べ替えます。2)。次に呼び出します。

mAdapter = new ArrayAdapter<Store>(mContext,
    android.R.layout.simple_list_item_1,
    sortedList);
setListAdapter(mAdapter);

あなたの質問はまだ少し不明確なので、これが役に立てば幸いです。一般に、アダプターによって生成されたリストがある場合、リストは自動的に生成され、使いやすさが損なわれるため、リストを手動で掘り下げることは望ましくありません。

于 2013-02-08T01:44:49.253 に答える
0

OPはこちら。私の解決策は、元の方法に固執することです。リストを少し変更したいが、リストを更新して更新し、スクロール位置を保持する場合、これを行う唯一の方法はclear()、リストを再入力することです。

ソース: http://vikinghammer.com/2011/06/17/android-listview-maintain-your-scroll-position-when-you-refresh/

于 2013-02-08T03:14:05.917 に答える