1. ホーム
  2. android

[解決済み] ListViewに戻ったときのスクロール位置の維持/保存/復元

2022-03-24 12:08:06

質問

長い ListView があり、ユーザーが前の画面に戻る前にスクロールできるようになっています。ユーザーがこの ListView 再び、リストを以前と同じポイントにスクロールさせたいのです。これを実現する方法について、何かアイデアがあれば教えてください。

どのように解決するのですか?

これを試してみてください。

// save index and top position
int index = mList.getFirstVisiblePosition();
View v = mList.getChildAt(0);
int top = (v == null) ? 0 : (v.getTop() - mList.getPaddingTop());

// ...

// restore index and position
mList.setSelectionFromTop(index, top);

説明する。
ListView.getFirstVisiblePosition() は、一番上に表示されているリスト項目を返します。しかし、この項目は部分的にスクロールして見えなくなっている可能性があり、リストの正確なスクロール位置を復元したい場合は、このオフセットを取得する必要があります。そのため ListView.getChildAt(0)View をトップリストのアイテムに、そして View.getTop() - mList.getPaddingTop() の先頭からの相対オフセットを返します。 ListView . 次に ListView を呼び出すと、そのスクロール位置は ListView.setSelectionFromTop() の上端から、欲しいアイテムのインデックスとその上端を配置するオフセットを指定します。 ListView .