2

私のファンクションコードがもう機能していなかったので、今日は数時間を失いました。フラグメントのビューをリロードする コードは、サポートライブラリ25.1.0の新しいバージョンにアップデートした後、もう働いていませんでした。リフレッシュフラグメントがもう機能しない

これは私のコードです:

FragmentManager manager = getActivity().getSupportFragmentManager(); 
FragmentTransaction fragmentTransaction = manager.beginTransaction(); 
fragmentTransaction.detach(fragment); 
fragmentTransaction.attach(fragment); 
fragmentTransaction.commit(); 

私はいくつかを入れてデバッグしようとしていますブレークポイントは

public void onPause() 
public void onStop() 
public void onAttach(Context context) 
public void onDetach() 
public void onDestroyView() 
public void onDestroy() 

ですが、アプリケーションがその機能のいずれにも入っておらず、画面に何も表示されません。

添付ファイルを使わずに単独でデタッチを呼び出すと、アプリケーションはonPauseとonStopに入り、ビューは画面から離れます。

+1

これを質問に分けて、自分の質問に答える必要があります。一緒に質問と答えを入れないでください、それは混乱しています。 –

+0

@RickS ok、完了しました;) –

+0

ありがとう!しばらくすると、それを受け入れられた回答としてマークすることができます。 –

答えて

3

私は自分自身が同じ問題に直面していることを知り、オンラインで回答が見つからなかった。最後に、サポートライブラリのRevision 25.1.1のFragment Transactionsにいくつかの最適化が追加されたことがわかりました。 (https://developer.android.com/topic/libraries/support-library/revisions.html#25-1-1参照)。期待通りに動作するようになりますお取引のためにそれらを無効にする:

FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); 
transaction.setAllowOptimization(false); 
transaction.detach(fragment).attach(fragment).commitAllowingStateLoss(); 

更新

setAllowOptimizationすることは推奨されません。代わりにsetReorderingAllowedを使用してください。

+0

なぜ単に 'commit'の代わりに' commitAllowingStateLoss'を使うことをお勧めしますか? – Aba

1

ありがとうございました。ここでは、getSupportFragmentManagerを使用するために少し変更しました。

FragmentTransaction t = getActivity().getSupportFragmentManager().beginTransaction(); 
t.setAllowOptimization(false); 
t.detach(this).attach(this).commitAllowingStateLoss(); 
関連する問題