ViewPagerを使うときに使用するFragmentStatePagerAdapterが、終端のページをremoveすることしか考えてなくて中間のページを削除するとめちゃくちゃにバグるんですねこれ
[Fragment 0][Fragment 1][Fragment 2]
とある状態で
Fragment 1をremoveすると
[Fragment 0][Fragment 2]
になって、一見できてるみたいに見えるけど
この状態でFragment 3を追加すると
[Fragment 0][Fragment 2][ ]
と、Viewが空っぽのページになったり(その後3番目のページはずっとこうなる)
Fragment 1を削除するとなぜか
[Fragment 1][Fragment 2]
になったり。
ViewPagerが内部でページのデータを保持している?っぽい?から?消しても?残ってて?そこに追加できないけど?そこにあるFragmentはdestroyされてるから?もうonCreateView呼ばれなくて?空っぽ?んなわけあるかいな
なんかもうわけわかんなくてわけわかんないです Androidなんて無くなればいいのに
[追記]
下の感じで回避出来ました
int current = pager.getCurrentItem(); adapter.remove(current); List<MyFragment> list = new ArrayList<MyFragment>(); list.addAll(adapter.getList()); adapter = new MyFragmentPagerAdapter(getSupportFragmentManager(), list); pager.setAdapter(adapter);
つまるところ、
・Adapterからリスト(or配列)を引き出せるようにしておく
・リストから要素を削除して、notifyDataSetChangedしないでその状態のリストをコピー
・Adapterのインスタンスをnewして新しいAdapterにコピーしたリストを与える
・ViewPagerにAdapterをsetしなおす
という流れ。
どうやらFragmentStatePaerAdapterにしてもFragmentPagerAdapterにしても内部でなんかキャッシュ作ってるらしくて、それが影響していろいろな不都合が生じてるらしいので、必要な情報だけコピーした新しいAdapterをPagerに充てることで解決です。
この形式であれば自分で実装したMyFragmentPagerAdapterにcloneメソッドでも定義しておくと便利かもしれないなあとも思った。
何はともあれ解決はしたので、同じ悩みの方がいてここを見て解決されたら幸いです