0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

NestedScrollViewのスクロール位置が復元されない

Last updated at Posted at 2024-12-18

事象

NestedScrollViewを利用したFragmentから、別のFragmentに遷移してpopBackしたとき、スクロール位置が復元されず、一番上に戻ってしまう。

解決方法

NestedScrollViewに(xmlレイアウトファイル内で)idを指定する。

たったこれだけです。

なお、本アプリは、1Activity上で複数のFragment遷移だけを行う構成になっています。

        <androidx.core.widget.NestedScrollView
            android:id="@+id/nested_scroll_view"  <!-- これを追加 -->

補足

当初は、わざわざonPausescrollYをViewModelに保存して(※)、onViewCreatedで値が設定されていればscrollYに再セットして無理矢理スクロールさせる、なんてことをしていましたが、それを通過しないフローがあったにもかかわらず復元できるようになっていることに気づき、最終的に「idを追加してやると保存/復元フローが自動で走るようになるらしい」との結論に至りました。

コードから利用する必要が無く、constraintの対象にもならないようなViewだとidは付けないままにしてしまうことが多いと思いますが、意外にそれが盲点になることがあるようですね。

※FragmentAからFragmentBに遷移するとき、FragmentA自体は破棄され、戻ったときに再作成されますが、ViewModelはメモリ上に残っているようだったのでこのようにしていました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?