2016-07-05 91 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()从Activty的的onResume()方法也。 – Drv

+0

@Drv,如果我这样做,它会打破应用逻辑 – inthy

回答

3

经过一段时间我找到了答案:在onStop之后执行片段事务是不可能的,它将导致java.lang.IllegalStateException:在onSaveInstanceState之后无法执行此操作。由于JavascriptInterface是在单独的线程中执行的,因此我没有收到该异常。当我强迫我的代码在主线程中运行时,我得到了那个错误。所以我需要实现一个不同的逻辑,也使用一些Activity生命周期方法,或者切换到多个活动逻辑。希望我的回答能帮助任何人。

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(); 

尝试,这可能是帮你