2017-01-09 6 views
2

FragmentTransactionに関する問題があります。だから私はFragmentonDestroyView()onStop()を頼りにして、活動の最中にツールバーを表示したり隠したりします。ここで私は、トランザクションを行う方法は次のとおりです。私はデバッグする場合Android - 最後のフラグメントが削除される前に、フラグメントがコンテナに追加されます。

getSupportFragmentManager().beginTransaction() 
    .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN) 
    .replace(R.id.activity_frame, fragment, tag) 
    .addToBackStack(tag) 
    .commit(); 

は、交換FragmentonDestroyView()onStop()を通過する前に、新しいFragmentはそのonCreateView()を通過することを示しています。

これはちょうど最近起こったことですが、ツールバーが異常な動作を示していて、今朝までそれをチェックする機会がありませんでした。これについてのヒント?

答えて

2

この動作は、そのスレッドに記述のようにあなたが古い動作に切り替えることができhttps://code.google.com/p/android/issues/detail?id=230415

を参照して、しばらく前にサポートライブラリに変更されました:

これは、意図した動作の変更です。操作を最適化し、フラグメントの移行を延期する新しい機能があり、これがその副作用です。

フラグメント操作の最適化を無効にするには、FragmentTransaction.setAllowOptimization(false)を呼び出します。これにより、すべてが適切な順序で実行されますが、操作が最適化されなくなります。

別のアプローチは、と呼ばれるのではなく、新しいフラグメントのonCreateView()に既に存在しているツールバーの取り扱いbeeingてonDestroyView()onStop()に依存しないようになります。たとえば、ツールバーを常にonCreateView()に置き換え、ツールバーが依然として独自のフラグメントによって作成されている場合は、onStop()/onDestroy()のツールバーを削除するだけです。

+0

だからそれは意図されていますか?私はそうだと思ったが、私はサポートライブラリをダウングレードしたが、何も変わっていない。私は十分にダウングレードしていないと思う。実際にはアクティビティが管理しているツールバーと同じだ。私はすべてのフラグメントonDestroyまたは停止時にそれがその特定のフラグメント、またはそれを必要とする他のフラグメントでのみ使用されるようにしています。 –

+0

それはさらに簡単になります。あなたのフラグメントを実装する抽象ブール値のshowToolbar()メソッドを定義する抽象基底フラグメントのonCreateView()でのみ、ツールバーの可視性を制御できます。ただ、いくつかのブレーンストーミング:) – tknell

+0

さて、私はその笑いをしてきました。あなたが与えた答えから、 'FragmentTransaction'には' .setAllowOptimization(false) 'という新しいメソッドがあります。君は!そして、おっと私は昨日からあなたの答えを受け入れていない、それは私がどこか他の笑に行く時間だった –

関連する問題