Help us understand the problem. What is going on with this article?

ViewPager + Fragmentを使った時に起きた困った動作

More than 1 year has passed since last update.

tl;dr

ViewPagerの中でFragmentを使う時は場合によってFragmentの再生成が行われないので思った通りに動作しないことがあるので注意する。

実際に起こった動作

言葉では説明しづらいので以下のgifをご覧ください
sample.gif

どうでもいいんですが、この動作ってググるときになんてキーワードでググれば良いか難しい

原因

どうやらナビゲーションを切り替えた時にViewPagerの中にあるFragmentが再生成されずに使いまわされているから起こるらしい。

解決策

以下のようなFragmentPagerAdapter部分をFragmentStatePagerAdapterにするとFragmentが再生成されるようになり正しく動作します。

// 修正前
val adapter = object: FragmentPagerAdapter(fragmentManager)
// 修正後
val adapter = object: FragmentStatePagerAdapter(fragmentManager)

この他にもonDestroyViewなどのタイミングで利用しているadapterにnullをセットしても正しい動作になります。
ただし、nullをセットするadapterがフラグメント内にあったりするとフラグメントのトランザクションがコミットされた後にフラグメントを操作しようとするためエラーを吐くことがあります。

最後に

この動きを解決するときにググってもピンポイントで解決策が出てこなくて(根本的になんてググれば良いかもよく解らなかった)解決にちょっと手間取ったので、この記事を見て少しでも解決しやすくなると嬉しいです。
Androidって難しい

halprogramming
専門学校HALのプログラミングが好きな人が集まっている同好会です。HALの在学生に限らず、OB, OGなども存在します。
https://www.hal.ac.jp
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away