2016-07-05 6 views
0

私はフラグメントでアプリケーションを開発しています。これにはJavaScriptアクティビティが呼び出され、フラグメント置換ロジックがあります。アプリケーションがフォアグラウンドにあるときはすべて正常に動作しますが、アプリケーションがバックグラウンドになると、フラグメントトランザクションの置換は機能しません。私のアプリケーションに戻ると、私はまだ古い断片を見て、新しい断片を見ません。Androidフラグメントトランザクションのバックグラウンド

@JavascriptInterface 
public void beginCall(String toast) { 
    FragmentTransaction fTrans; 
    taskFragment = TaskFragment.newInstance(toast,""); 
    fTrans = getSupportFragmentManager().beginTransaction(); 
    fTrans.replace(R.id.frgmCont, taskFragment); 
    fTrans.commit(); 
} 

どうしたのですか?フラグメントトランザクションがバックグラウンドで機能しないのはなぜですか?

+0

コールbeginCall()メソッドかもしれ試してみてください。 – Drv

+0

@Drv、そうすればアプリロジックが壊れる – inthy

答えて

3

私は答えを見つけました:onStopの後でフラグメントトランザクションを実行することは不可能です。java.lang.IllegalStateExceptionが発生します:onSaveInstanceStateの後にこのアクションを実行できません。 JavascriptInterfaceは別のスレッドで実行されていたため、例外が発生していませんでした。メインスレッドでコードを強制実行すると、そのエラーが発生しました。だから私は、いくつかのアクティビティライフサイクルメソッドを使用して、別のロジックを実装するか、複数のアクティビティロジックに切り替える必要があります。私の答えが誰にでも役立つことを願っています。

1
FragRecordSongList FragRecordSongList = new FragRecordSongList(); 
     FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction(); 
     ft.addToBackStack(FragRecordSongList.class.getName()); 
     ft.replace(R.id.fragContainer, FragRecordSongList, FragRecordSongList.class.getName()); 
     ft.commit(); 

これはまた、あなたのActivtyのonResume()からの助けあなた

関連する問題