如何从 Fragment A 返回到 Fragment B?
How go back from Fragment A to Fragment B?
我需要从 FragmentA 转到 FragmentB(我正在使用导航抽屉)
我在 FragmentB 中创建了这个方法:
public void onBackPressed(){
FragmentManager fm = getActivity().getFragmentManager();
fm.popBackStackImmediate();
}
但是它们不起作用,我该如何实现这个方法?
此代码应在 Activity
内,包含两个片段。
确保您将片段添加(而不是替换)到后台堆栈,方法是调用:
android.app.FragmentTransaction#add(int, android.app.Fragment, java.lang.String)
android.app.FragmentTransaction#addToBackStack
android.app.FragmentTransaction#commit
或支持库中的等效项
为了将一个片段转到另一个片段,我从片段调用 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();
}
添加片段时,还必须将其添加到片段的后台堆栈中。
FragmentTransaction ft = getSupportFragmentManager.beginTransaction();
ft.replace(R.id.content, fragment, backStateName);
ft.addToBackStack(backStateName);
ft.commit();
(此处 R.id.content 是您 activity 中的片段容器)
然后您必须在包含片段的 activity 中覆盖 onBackPressed 方法。
@Override
public void onBackPressed() {
if (getSupportFragmentManager().getBackStackEntryCount() > 1) {
getSupportFragmentManager().popBackStack();
}
}
如果您想自定义您的 onBackPressed,那么您可以在 activity 中检查您当前可见的片段,并创建一个回调来为该特定片段执行操作。
示例 -
@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() 方法中。
我需要从 FragmentA 转到 FragmentB(我正在使用导航抽屉)
我在 FragmentB 中创建了这个方法:
public void onBackPressed(){
FragmentManager fm = getActivity().getFragmentManager();
fm.popBackStackImmediate();
}
但是它们不起作用,我该如何实现这个方法?
此代码应在 Activity
内,包含两个片段。
确保您将片段添加(而不是替换)到后台堆栈,方法是调用:
android.app.FragmentTransaction#add(int, android.app.Fragment, java.lang.String)
android.app.FragmentTransaction#addToBackStack
android.app.FragmentTransaction#commit
或支持库中的等效项
为了将一个片段转到另一个片段,我从片段调用 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();
}
添加片段时,还必须将其添加到片段的后台堆栈中。
FragmentTransaction ft = getSupportFragmentManager.beginTransaction();
ft.replace(R.id.content, fragment, backStateName);
ft.addToBackStack(backStateName);
ft.commit();
(此处 R.id.content 是您 activity 中的片段容器)
然后您必须在包含片段的 activity 中覆盖 onBackPressed 方法。
@Override
public void onBackPressed() {
if (getSupportFragmentManager().getBackStackEntryCount() > 1) {
getSupportFragmentManager().popBackStack();
}
}
如果您想自定义您的 onBackPressed,那么您可以在 activity 中检查您当前可见的片段,并创建一个回调来为该特定片段执行操作。 示例 -
@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() 方法中。