Androidサポートライブラリ23.1.1
から最新の25.1.0
にアップグレードした後、popBackStack()
の動作が変更されました。23.1.1から25.1.0へのサポートライブラリのアップグレード後に動作が異なる
たとえば、BackStackには3つのFragmentTransactions
があります。 4番目のFragmentTrsansactionがBackStackに追加されました。 FragmentTransactionsはこのようなものです:
FragmentTransaction transaction = fragmentManager.beginTransaction()
.replace(R.id.fragment_container_single, target, CoreActivity.FRAGMENT_TAG_LEFT)
.addToBackStack(<CONCRETE_TRANSACTION_NAME>)
.commit();
断片#4は、(私が知っている、それは醜いだと私はこれを変更する必要がある)、それのルートが自動的にonViewCreated()
時の#5を断片化するロジックを持っています。とにかく、フラグメント#5のままにしたい場合、フラグメント#4より前に表示されたフラグメントに再開したいと思います。私は、トランザクション名で次の操作を行います。
getFragmentManager().popBackStack(“<CONCRETE_TRANSACTION_NAME_4>”, FragmentManager.POP_BACK_STACK_INCLUSIVE);
またはこの:
getFragmentManager().popBackStack(“<CONCRETE_TRANSACTION_NAME_3>”, 0);
しかし、フラグメント#4のこの呼び出しonCreateView()
とonViewCreated()
が呼び出され、フラグメント#5はBackStackにすぐに追加されますと。私がフラグメント#1に再開しても、返されたいFragmentTransactionに関係なく、フラグメント#2、フラグメント#3、フラグメント#4のために、BackStackのすべてのフラグメントに対して呼び出されます。onViewCreated()
サポートライブラリ23.1.1
私は首尾よくフラグメント#3にジャンプします。フラグメント#4は、onViewCreated()
を呼び出さずにインクルードされます。私のFragmentTransactionの「外側」のフラグメントのためにonViewCreated()
を呼び出すことは不要と思われるので、これはより直観的でわかりました。
私が知っているとおり、addToBackStack()
はトランザクション状態を保存するだけで、フラグメント自体とフラグメントは再作成する必要がないかもしれません。
postsと似ていますが、なぜ私はサポートライブラリの更新後に壊れているのか理解したいと思います。私はどこでも変更を見つけることができません。これはバグだったのですか、それともバグですか?
私のコードを変更するつもりです。
ありがとうございました!
更新 私はサポートライブラリ25.1.0にアップグレードした後、より多くのライフサイクルの問題や変更があります。 Google issueがあり、そこに私の問題を追加でコメントしました。現在、私は最新の24.2.1に戻ってこのトピックに注目しなければなりませんでした。これは私の一時的な解決策です。これらの問題は、サポートライブラリ25.0.0から始まります。
このバージョンでは、戻るボタンに問題があります。私はそれがこのライフサイクルの問題にも関係しているのだろうかと思います。アクティビティインスタンスが再度作成されます。 –
これを確認しました。私が戻ったとき、私の活動は再現されません。活動の間に期待どおりに一時停止され、再開されます。しかし、断片のバックバーヒアは、その順序で変わった。それは新しいライブラリのバージョンに関連していないようです。たとえば、メモリが足りないためにあなたの活動がAndroidによって再現されるのでしょうか? –
サポート25.xを使用すると、戻るボタンを使用した後にクラッシュしました。私が24.xに戻ると、うまく動作します。いくつかのデバイス。私はしばらく時間があれば、最低限の実行可能なテストを抜き出す必要があります。 –