我需要从FragmentA去FragmentB(我使用navigationdrawer)如何从片段A回到片段B?
我创建FragmentB这个方法:
public void onBackPressed(){
FragmentManager fm = getActivity().getFragmentManager();
fm.popBackStackImmediate();
}
,但他们没有工作,我怎么能实现这个方法?
我需要从FragmentA去FragmentB(我使用navigationdrawer)如何从片段A回到片段B?
我创建FragmentB这个方法:
public void onBackPressed(){
FragmentManager fm = getActivity().getFragmentManager();
fm.popBackStackImmediate();
}
,但他们没有工作,我怎么能实现这个方法?
当你把你的片段,你还必须将它添加到您的片段的堆栈中。
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()方法中。
mmhh ..但是什么是'backStateName'?我从来没有宣布backstate .. –
你可以把你的类名字作为字符串backStateName = FragmentB.class.getName(); – Karan
这段代码应该在Activity
之内,保存这两个片段。
可以肯定,您添加(不更换)的片段回栈,通过调用:
android.app.FragmentTransaction#add(int, android.app.Fragment, java.lang.String)
android.app.FragmentTransaction#addToBackStack
android.app.FragmentTransaction#commit
或同等的支持库
呵呵tnks现在我把我的'onBackPressed()'方法放在我的活动中,但现在当我点击“后退按钮”时,他什么都不做。 –
你确定Backstack不是空的吗?如果它是空的,你应该调用'super.onBackPressed()'。 –
对于要去一个片段到另一个我从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();
}
**用片段A替换**片段B –
我该怎么办?你能告诉我一个例子吗? –
请参考[官方文档](https://developer.android.com/training/basics/fragments/fragment-ui.html) –