2016-09-22 62 views
0

我需要從FragmentA去FragmentB(我使用navigationdrawer)如何從片段A回到片段B?

我創建FragmentB這個方法:

public void onBackPressed(){ 
    FragmentManager fm = getActivity().getFragmentManager(); 
    fm.popBackStackImmediate(); 
} 

,但他們沒有工作,我怎麼能實現這個方法?

+0

**用片段A替換**片段B –

+0

我該怎麼辦?你能告訴我一個例子嗎? –

+0

請參考[官方文檔](https://developer.android.com/training/basics/fragments/fragment-ui.html) –

回答

2

當你把你的片段,你還必須將它添加到您的片段的堆棧中。

FragmentTransaction ft = getSupportFragmentManager.beginTransaction(); 
        ft.replace(R.id.content, fragment, backStateName); 
        ft.addToBackStack(backStateName); 
        ft.commit(); 

(這裏R.id.content是在你的活動你的片段容器)

然後,你必須重寫onBackPressed方法在您的活動包含您的片段。

@Override 
public void onBackPressed() { 
if (getSupportFragmentManager().getBackStackEntryCount() > 1) { 
       getSupportFragmentManager().popBackStack(); 
    } 
} 
如果你想自定義您的onBackPressed那麼你可以檢查您在您的活動當前可見的片段,並針對特定的片段執行動作創建一個回調

。 。 例子 -

@Override 
    public void onBackPressed() { 
    if (getSupportFragmentManager().getBackStackEntryCount() > 1) { 
       Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.content); 
       if (fragment instanceof FragmentB) { 
          ((FragmentB) fragment).onBackPressed(); 
//      getSupportFragmentManager().popBackStack(); 
     } 
    } 

現在你可以添加getSupportFragmentManager()popBackStack();在你的Fragment的onBackPressed()方法中。

+0

mmhh ..但是什麼是'backStateName'?我從來沒有宣佈backstate .. –

+0

你可以把你的類名字作爲字符串backStateName = FragmentB.class.getName(); – Karan

0

這段代碼應該在Activity之內,保存這兩個片段。

可以肯定,您添加(不更換)的片段回棧,通過調用:

android.app.FragmentTransaction#add(int, android.app.Fragment, java.lang.String) 
android.app.FragmentTransaction#addToBackStack 
android.app.FragmentTransaction#commit 

或同等的支持庫

+0

呵呵tnks現在我把我的'onBackPressed()'方法放在我的活動中,但現在當我點擊「後退按鈕」時,他什麼都不做。 –

+0

你確定Backstack不是空的嗎?如果它是空的,你應該調用'super.onBackPressed()'。 –

0

對於要去一個片段到另一個我從Fragment調用Activity的方法,這樣Activity的方法就可以訪問那個持有片段的視圖,並且它可以輕鬆切換。

像這在我的片段

((MainActivity)getActivity())TransitionFromItemToCategory();

而在片段篩選

public void TransitionFromItemToCategory(){ 
    FoodCategoryFragment FCM = new FoodCategoryFragment(); 
    FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
    ft.replace(R.id.fragment_container, FCM); 
    ft.commit(); 
} 
相關問題