2012-02-13 21 views
9

問題:リストビューの内容が(カスタマイズされた)SimpleCursorAdapterで更新されるたびに、リストビューがスクロール位置を一番上にリセットします。 ListViewを更新したときにそのスクロール位置を維持したいと思います。ListViewでスクロール位置を維持しながらSimpleCursorAdapterを更新します。

いつも新しいアダプタインスタンスを作成し、ListView.setAdapter()を使用して始めましたが、this discussionによれば、アダプタをリセットするのではなく、アダプタを更新する必要があります。私は正しく動作するSimpleCursorAdapterのためにこれを行う方法を見つけることができません。新鮮なカーソルでSimpleCursorAdapter.changeCursorAndColumns()に成功アダプタを更新しますが、まだスクロール位置をリセットします -

は、ここではいくつかのメソッドの引数を省略し、私が試したもの、です。
- SimpleCursorAdapter.changeCursor()は同じように動作します。
- SimpleCursorAdapter.swapCursor()はapi 11まで利用できません。また、私はAPI 8用に開発中です。
- SimpleCursorAdapter.notifyDataSetChanged()はListViewを更新しません。 (たぶん別のステップがありません。)
- ListView.invalidate() ListViewは更新されません。
- SimpleCursorAdapter.requery()は、ListViewを空白にします。非推奨です。
- 私はListView.setSelection()ソリューションに精通していますが、リストビューが更新されたときにリストビューが動かないようにしたいと思います。これにより、リスト内の位置にスナップされます。

これは一般的で簡単な問題であるようです。誰かがそれを扱っていますか?

+0

ていると私のため

Cursor cursor = mDataHelper.getWritableDatabase().query( DataContract.Incares.TABLE_NAME, // Table to Query null, // all columns null, // Columns for the "where" clause null, // Values for the "where" clause null, // columns to group by null, // columns to filter by row groups DataContract.Incares.UUID +" DESC" // sort order ); CursorAdapter.swapCursor(cursor); CursorAdapter.notifyDataSetChanged(); 

を働いた答えは以下の私のコメントを参照してください。 SimpleCursorAdapter.changeCursor()は正常に動作します。 – pvans

答えて

5

私も同様の問題がありました。カーソルの内容が変更されるたびにMy CursorAdapterがスクロール位置をリセットします。

データが変更されるたびに実際に新しいリストアダプターを設定したことに気付きませんでした。私は、カーソル自体がアダプターにコンテンツの変更について通知すると思っていましたが、私の場合、ListFragmentのLoaderManager.LoaderCallbacks.onLoadFinished()をトリガーするContentProviderです。そのコールバックでは、新しいアダプタを作成する代わりにCursorAdapter.changeCursor()を使用します。すべてうまく動作します。

私はこれがあなたの問題の解決に役立つことを願っています。

+0

SimpleCursorAdapter.changeCursor()が正しく動作することが判明しました。リストビューのスクロール位置をリセットさせる私のケースでは、カーソルを変更する直前に、ListView.SetDivider()およびListView.SetDividerHeightというコード行が2組ありました。本当に迷惑です。また、そこに 'ListView.setCacheColorHint()'行があり、スクロール位置がリセットされません。 – pvans

0

ポストで同じ非同期タスクの実行でしたが、次のコードを使用CursorAdapterがグローバル変数

関連する問題