ここでは、Twitterのフィードを表示する単純なリストビューがあります。私はsqliteからツイートを取得しているCursorAdapterを持っています。私がカーソル上でrequery()を呼び出すと、データベースに追加された新しいツイートが取得されることが期待されます。これはすべて正常に動作し、新しい項目は、ListViewでこれが発生した後でも表示されます。新しいアイテムが追加されたときにRequeryが呼び出された後、CursorAdapterを使用したAndroid ListViewのスクロール位置が正しくない
問題は、項目位置のオフセットに基づいてスクロール位置が保存されているようです。 ListViewの最初の表示位置が4であるとしましょう。クエリを再作成して2つの新しいアイテムがリストの先頭に追加されると、ListViewは最初に表示されるアイテムのスクロール位置を4に保ちますが、リストには2つの新しいアイテムがあります私はリフレッシュ前の位置とは異なる位置4に別のアイテムが表示されるようになりました。この画像は前後示す:
注意をどのようにする前に、さえずるDは、最初に表示されるアイテムであり、その後、さえずるB現在、最初に表示項目となります。
私の質問は、この例では、ツイートDはまだ再クエリ後に最初に表示される項目になるように、私は、再クエリを呼び出すときに、カーソル位置決幅に基づいて、同じスクロール位置を維持しないか、でしょうか?
を呼び出すことができます可視... – Redth
あなたはそれを試しましたか?私のリストでさえ変数の高さの行があるからです。しかし、完璧に動作します。 'int top = v == null? 0:v.getTop(); 'この部分は、項目が半分に見える場合に実際に処理されます。 – Enigma