3

かなりの数のアイテムを含む 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);
    }
  });

これにより、指定された位置にあるアイテムがビューに表示されるまで、下にスクロールして上に戻るように強制されます。これにより、アイテムが上に配置される効果があります。さいわい、アニメーションは一番上から最後の位置までしかスクロールしないため、実際には一番下までスクロールしてから元に戻るということはありません。ただし、このソリューションは遅く、ハックで、一般的にひどいものです。誰かがより良いものを持っていますか?

4

0 に答える 0