7

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から始まります。

+0

このバージョンでは、戻るボタンに問題があります。私はそれがこのライフサイクルの問題にも関係しているのだろうかと思います。アクティビティインスタンスが再度作成されます。 –

+0

これを確認しました。私が戻ったとき、私の活動は再現されません。活動の間に期待どおりに一時停止され、再開されます。しかし、断片のバックバーヒアは、その順序で変わった。それは新しいライブラリのバージョンに関連していないようです。たとえば、メモリが足りないためにあなたの活動がAndroidによって再現されるのでしょうか? –

+0

サポート25.xを使用すると、戻るボタンを使用した後にクラッシュしました。私が24.xに戻ると、うまく動作します。いくつかのデバイス。私はしばらく時間があれば、最低限の実行可能なテストを抜き出す必要があります。 –

答えて

6

新しいサポート25.1.0に注意してください。

フラグメントライフサイクルで何か変更されました。
操作を最適化してフラグメントの移行を延期するために、という新しい機能があります。

これを読む: https://code.google.com/p/android/issues/detail?id=230415

+0

はい、ありがとう、私はすでにそれを認識しました。 'transaction.setAllowOptimization(false);を使用しても、何も変わらず、' onCreateView() 'も呼び出されます。しかし、あなたはこれが新しい最適化の効果だと思っていますし、古い動作に切り替えることはできませんか? –

+0

私は新しいライフサイクルがあなたのケースでも転落や行動を変えると思います。 –

+0

私はあまりにも新しい最適化かもしれないと思う。その間、私はGoogleの問題にコメントを残しました。おそらく、開発者はそれについて具体的なことを言うことができます。局所的に私のコードも変更したので、 'onCreateView()'はもはやFragmentTransactionをもう呼び出さないようにしました。私は他の人々もこれと一緒に考えていると思うし、もっと情報を得ることを願っている。 –

0

は、同様の問題がありました。 25.3で修正されました。0

関連する問題