5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

HALAdvent Calendar 2017

Day 21

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

Last updated at Posted at 2017-12-21

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って難しい

5
2
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
5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?