2016-09-22 65 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(); 
} 
相关问题