3

左側にListViewフラグメントがあり、右側にSearchView(基本的にはTextView)を含む他のいくつかのビューがあるタブレットアプリケーションで作業しています。SearchViewがフォーカスされているときに、リストビューのデータを更新したいのですが、更新できません。UIスレッドでNotifyDataSetChangedを実行しても、何も起こりません。リストビューでsetAdapter()を再度呼び出すと、リストビューが空白になります。

リストビューをもう一度タッチした場合(一時的なフォーカスが再び得られるか、アダプターでgetView()が呼び出されるようになる)にのみ、リストビューが更新されます。

誰かがこれを修正する方法についてアイデアを得ましたか?

Min-SdkおよびTargetは4.0.3です。

4

4 に答える 4

4

を使用して更新ルーチンを呼び出そうとしましたrunOnUiThread()か?

オブジェクトリストを再作成し、アダプタの新しいインスタンスにバインドしてから、呼び出して、リフレッシュルーチンnotifyDataSetChanged()setAdapter()再度機能します。

于 2012-12-12T09:40:51.997 に答える
2

ListViewの更新を処理するには、 ViewHolderを使用する必要があると思います。

于 2012-12-12T07:11:09.437 に答える
2

現在私が機能しているのは、基盤となるアダプターのデータを更新してから、そのアダプターですべてUIスレッドからnotifyDataSetChangedを呼び出すことです。

listViewでsetAdapterを再度呼び出す必要はありませんでした。

もちろん、私は質問をする前にこれらすべてをすでに試していたので、何が突然機能し始めたのかわかりません。

于 2012-12-12T10:35:35.890 に答える
0

runOnUiThreadメソッド内で呼び出します。また、その中のアダプタに新しいオブジェクトを追加します。

そのように:

runOnUiThread(new Runnable() {
    @Override
    public void run() {
        chatListAdapter.add(message);
        chatListAdapter.notifyDataSetChanged();
    }
});
于 2013-11-12T22:00:37.007 に答える