2017-10-12 16 views
1

私はコンテナ内のフラグメントを置き換えようとしています。 視覚的なものについて私は変更を見ることができ、新しいフラグメントは初期化されます。 しかし、コンテナ内のどのオブジェクトがチェックされていれば、以前に置き換えられた古いフラグメントが残っています。問題の原因になります。新しいフラグメントのメソッドを呼び出すことができません。 100%。
ここに私のコード:
Androidのフラグメントが実際に置き換えられない

fragmentTransaction = getFragmentManager().beginTransaction(); 
    Volumefragment volumefragment = new Volumefragment(); 
    System.out.println("Change Fragment"); 
    fragmentTransaction.replace(R.id.framecontainer,volumefragment); 
    fragmentTransaction.addToBackStack(null); 
    fragmentTransaction.commit(); 
    if(getFragmentManager().findFragmentById(R.id.framecontainer) instanceof Dummyfragmenet){ 
     System.out.println("Wrong object"); 
    } 
} 

答えて

3

あなたはフラグメントのトランザクションでコミットを行うと、あなたが本当にやっていることはそのフラグメントの交換を行うことをお知らせします。すぐには実行されず、UIスレッドが実行準備を整えたら置き換えられます。したがって、フラグメントトランザクションが完全に完了していないとき(非同期的に発生しているため)、印刷が呼び出されています。

getFragmentManager().executePendingTransactions() 

明確にするために、そしてFragmentTransactionがFragmentTransactionでコミットされた後のドキュメント」から取られた:あなたがコミットすると、印刷する前に、以下を追加した直後に、フラグメントが交換されたことを確認するには。 commit()は、プロセスのメインスレッドで非同期に実行されるようにスケジュールされています。 Visit https://developer.android.com/reference/android/app/FragmentManager.html#executePendingTransactions()

関連する問題