2017-05-19 71 views
0

我有三個片段A,B,C,我的過程是A到B到C.如何控制片段onResume?

我希望當我切換到C並回撥給B時,B可以立即切換到A.

所以我在B上設置了onResume的開關片段功能。

但結果是,我總是落在了上的一個片段,因爲當我改變到B的功能onResume被稱爲

我知道我可以刪除transaction.addToBackStack(null);那麼我就可以C到A ,但它會引起我的項目中存在一些錯誤,所以我儘量保持它。

是否有任何函數只有在C調用B時纔會啓動? 在此先感謝。

下面是我的切換功能:

private void switchFragment(Fragment fragment) { 
    FragmentManager manager = getActivity().getSupportFragmentManager(); 
    FragmentTransaction transaction = manager.beginTransaction(); 
    transaction.replace(R.id.mainFrame, fragment, null); 
    transaction.addToBackStack(null); 
    transaction.commit(); 
} 

我嘗試在B片段添加onResume,但是這將是A到B,和則B回到A馬上。

@Override 
public void onResume() { 
    super.onResume(); 
    //go back to fragment A 
    switchFragment(NewHomepage.newInstance()); 
} 
+0

創建布爾並將其設置爲true,B時的交易發生C,並在檢查的onResume如果布爾是true then switchFragment –

+0

謝謝你,你提醒我重點,它會起作用,但它的生命週期有任何可能,就像Activity onRestart,當回撥 –

+0

以獲得更準確的結果時,你可以將布爾值保存在SharedPreference中在C的內部後臺和B的Onresume內,檢查是否爲真,然後去A –

回答

1

您的片段轉移代碼應該是:

private void switchFragment(Fragment fragment) { 
FragmentManager manager = getActivity().getSupportFragmentManager(); 
FragmentTransaction transaction = manager.beginTransaction(); 
transaction.replace(R.id.mainFrame, fragment, null); 
transaction.addToBackStack("fragment_name_tagX"); 
transaction.commit(); 

}

以上,X是您的片段。在使用上面的函數從片段A導航到C之後,您的堆棧將會爲您分配的每個片段命名爲'fragment_name_tag'。

@Override 
public void onBackPressed() { 

FragmentManager fm = getActivity().getSupportFragmentManager(); 
    int count = fm.getBackStackEntryCount(); 

    if (count != 0) { 
     fm.popBackStack ("fragment_name_tagB",FragmentManager.POP_BACK_STACK_INCLUSIVE); 
    } else { 
     super.onBackPressed(); 
    } 
} 

所以,當你現在從C片段按後退按鈕,它會繼續片段A.

+0

感謝您的回答,但我有很多碎片,我有另一個功能來控制popBackStack,我害怕它會與我的項目混淆。 –

+0

@徐博俊等你想從片段C導航到A的事件? –

+0

B輸入一些值,並把用戶帶到C,當用戶點擊返回然後把它帶到A,我只是爲別人解決一些問題,謝謝你的幫助。 –

相關問題