Kuwapp's Blog

Android と Flutter やってます

【Android】FragmentPagerAdapterでFragmentを更新する

FragmentPagerAdapterを使用している場合に
表示しているFragmentを差し替えたいことがある。

FragmentPagerAdapterにはそういった機能は用意されていないようなので調べて実装してみた。

以下を参考にさせて頂きました。
ViewpagerのFragmentを動的に更新 - Qiita

上記の方法はViewPagerにセットされている全てのフラグメントを一度破棄し、再度セットする方法になります。
あまりページ数が多いとパフォーマンス的に問題があるかも・・?

流れ

ViewPagerにセットされているFragmentを更新したいときにActivityへ通知

ActivityからAdapter内のFragmentを全て削除し更新

1.FragmentからActivityへ通知


Fragmentでボタン押下時などFragmentを更新したい場合にrefreshメソッドを呼ぶ。
BundleにセットしておいたINDEXを取り出し、ActivityのonChageリスナーへ通知する
INDEXについては後述

2.ActivityからAdapter内のFragmentを削除し更新


onChangeメソッドでAdapter内のフラグメントを全て削除し更新する。
indexはsetCurrentItemメソッドの引数に使用し、表示していたページへ遷移するため使う。


getItemメソッド内でポジションをINDEXとしてBundleに格納しFragmentで参照できるようにしておく。
destryoAllItemメソッドは参考URL内のフラグメントを全て削除する処理です。


以上です。
GitHubGistに直書きしたので、コーディングミスあるかも。。
問題や不具合もっとこうしたらいいなどありましたら教えて下さい。