2016-07-05 81 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(); 

嘗試,這可能是幫你