かなりの数のアイテムを含む ListView があります。特定の位置までスクロールする方法を見つけたいのですが、その位置をビューの一番上にします。
もう1つの問題は、ListViewが無効になり、これが発生した後、ある時点で再描画され、再描画されたときにこの位置に戻る必要があることです。
SmoothScrollToPosition を試してみましたが、これはアイテムをビューに表示するだけで、一番上には配置しません。scrollTo(x,y) を試しましたが、ビュー内のアイテムの正確な y 位置がわかりません。setSelection と setSelectionFromTop を試しましたが、ビューが無効になると選択がリセットされます。また、post(Runnable) 呼び出し内でこれらすべてを試しましたが、うまくいきませんでした。
これが私が現時点で持っている解決策です。これはひどいものです。
listView.post(new Runnable() {
@Override
public void run() {
listView.smoothScrollToPosition(10000);
listView.smoothScrollToPosition(pos);
}
});
これにより、指定された位置にあるアイテムがビューに表示されるまで、下にスクロールして上に戻るように強制されます。これにより、アイテムが上に配置される効果があります。さいわい、アニメーションは一番上から最後の位置までしかスクロールしないため、実際には一番下までスクロールしてから元に戻るということはありません。ただし、このソリューションは遅く、ハックで、一般的にひどいものです。誰かがより良いものを持っていますか?