2017-01-23 4 views
1

私はMosby AndroidアプリにModel-View-Presenterライブラリを使用しています。特定のビューでは、Design Support Library v25.1.0で実装されたBottom Navigationを使用しています。私は1つのアクティビティで3つのフラグメント間を切り替えています。私はMosbyのカスタムRestorableViewStateを使用しています。Mosby MVP - onDestroyView()の後にフラグメントの状態を再作成する方法は?

私が持っている問題は、アクティビティのonSaveInstanceState(バンドルバンドル)にViewの状態を保存していることです。これは、同じアクティビティでフラグメントを交換すると呼び出されず、フラグメントのonDestroyView()だけが呼び出されます。現在、私はフラグメンテーション自体を別々に保存しています(フラグメンテーションの切り替え中にフラグメントが破損することはなく、フラグメントのビューだけが破壊されるので)。しかし、私はMVPアーキテクチャを使用する目的を少し壊してしまいます。

方向変更とフラグメントの交換の両方で、フラグメントの状態を格納するための洗練されたソリューションはありますか?

答えて

1

これはやや難解です。私はあなたがreplace()とFragmentTransactionを作っていると思いますか?問題は、置換するたびに実際に新しいFragmentインスタンスを作成することです。したがって復元可能な状態はありません。むしろFragmentTransaction.show(fragment)FragmentTransaction.hide(fragment)と呼ぶべきです。

また、Mosby 2はこの使用法のサポートを持っていません.Mosby 3はこれをサポートします。

+0

ハンスがその1つをクリアしてくれてありがとう!はい、私はすぐに置き換えを使用している、実装を実装/フラグメントを表示しているが、私が読んだことは、この種類のUIパターン(メモリが重くなる可能性があります最大5つのビューを実装するための最良の方法ではないかもしれない) 。私たちMosby 3を楽しみにしています! –

+1

よくMosby3はその問題を解決できません。 'replace()'を呼び出すたびに、前のフラグメントが破棄され、新たにインスタンス化されたフラグメントが追加されます。完全に新しい状態とプレゼンターで新しいオブジェクト(フラグメント)を実際に作成しているため、ライブラリ/フレームワークはこの問題を解決できません – sockeqwe

+0

100%クリアするには、このライブラリを使用しました:https://github.com/ncapdevi/FragNav/ blob/master/frag-nav/src/main/java/com/ncapdevi/fragnav/FragNavController.java - switchTabメソッド。それはフラグメントを破壊するものではなく、onDestroyView()だけが呼び出されます。 –

関連する問題