0

1) リストをレンダリングする CursorAdapter または SimpleCursorAdapter を作成します。

2) リストを少し下にスクロールして、位置 0 にならないようにします。

3) 作成した CursorAdapter フィルターを実行します。

結果:

フィルタによってデータが正しく更新され、リスト ビューが新しいデータで更新されます。

大きな問題は、リストの位置/選択が以前の位置にとどまることです (新しい結果に十分な行がある場合)。

フィルター内で setSelection(0) を実行して常に位置を 0 に設定したいのですが、その方法がわかりません。明らかな提案はありますか?

dataAdapter.setFilterQueryProvider(new FilterQueryProvider() {
   public Cursor runQuery(CharSequence constraint) {

    listView.setSelection(0);
    return newCursor;
});

データが更新される前に setSelection() が作成され、カーソルがスワップされるため、上記は機能しません。

4

2 に答える 2

0

ListView.setItemChecked(int position, boolean checked)または(API >= 8 の場合)を試しましたかlistView.smoothScrollToPosition(position)?

于 2012-12-14T14:50:59.603 に答える
0

答えを見つけました。フィルターを介して setSelection() を更新する方法はありませんが、CursorAdapter の changeCursor メソッドをオーバーライドするとうまくいきました。

@Override
    public void changeCursor(Cursor cursor) {
        super.changeCursor(cursor);

        listView.setSelection(0);
    }
于 2012-12-14T15:14:28.137 に答える