按下后退按钮时如何使片段替换为特定片段
How to make fragment replaced by a specific fragment when back button pressed
我有一个包含导航抽屉的应用程序其中一个片段是主片段我想要应用程序在按下后退按钮时在其他一些片段中转到主片段例如如果用户按下 fr1 那么fr2 然后 fr3 我希望它 return 回到主页按钮(其中 fr1、2、3 是导航抽屉的片段,请注意应用程序中还有其他片段我不希望它们转到按下后退按钮时的主页)
您可以覆盖 Activity 中的 onBackPressed() 方法,并将 Fragment 事务代码放入其中。我不完全了解你的操作,所以下面我写了一个你可以使用的通用示例:
@Override
public void onBackPressed() {
int count = getFragmentManager().getBackStackEntryCount();
if (count == 0) {
super.onBackPressed();
//additional code
} else {
getFragmentManager().popBackStack();
}
}
如果您的后台堆栈中有多个片段,您将无法仅通过 popBackStack()
到达您的主片段,因为它只会反转最后一个操作。例如,如果您有 3 个片段(home、fr1、fr2),您首先会到达 fr2,然后才到 home。如果你想直接在 onBackPress() 上返回主页片段,你应该用你的主页片段替换你当前拥有的片段。
@Override
public void onBackPressed() {
int stackCount = getFragmentManager().getBackStackEntryCount();
if (stackCount == 1) {
super.onBackPressed(); // if you don't have any fragments in your backstack yet.
} else {
// just replace container with fragment as you normally do;
FragmentManager fm = getFragmentManager();
fm.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);//clear backstackfirst and then you can exit the app onbackpressed from home fr
FragmentTransaction transaction = fm.beginTransaction();
transaction.replace(R.id.container, new HomeFragment());
transaction.commit();
}
}
编辑:
如何查看当前可见片段
Fragment f = getFragmentManager().findFragmentById(R.id.container);
if (f instanceof HomeFragment) {
//do smth
}
我有一个包含导航抽屉的应用程序其中一个片段是主片段我想要应用程序在按下后退按钮时在其他一些片段中转到主片段例如如果用户按下 fr1 那么fr2 然后 fr3 我希望它 return 回到主页按钮(其中 fr1、2、3 是导航抽屉的片段,请注意应用程序中还有其他片段我不希望它们转到按下后退按钮时的主页)
您可以覆盖 Activity 中的 onBackPressed() 方法,并将 Fragment 事务代码放入其中。我不完全了解你的操作,所以下面我写了一个你可以使用的通用示例:
@Override
public void onBackPressed() {
int count = getFragmentManager().getBackStackEntryCount();
if (count == 0) {
super.onBackPressed();
//additional code
} else {
getFragmentManager().popBackStack();
}
}
如果您的后台堆栈中有多个片段,您将无法仅通过 popBackStack()
到达您的主片段,因为它只会反转最后一个操作。例如,如果您有 3 个片段(home、fr1、fr2),您首先会到达 fr2,然后才到 home。如果你想直接在 onBackPress() 上返回主页片段,你应该用你的主页片段替换你当前拥有的片段。
@Override
public void onBackPressed() {
int stackCount = getFragmentManager().getBackStackEntryCount();
if (stackCount == 1) {
super.onBackPressed(); // if you don't have any fragments in your backstack yet.
} else {
// just replace container with fragment as you normally do;
FragmentManager fm = getFragmentManager();
fm.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);//clear backstackfirst and then you can exit the app onbackpressed from home fr
FragmentTransaction transaction = fm.beginTransaction();
transaction.replace(R.id.container, new HomeFragment());
transaction.commit();
}
}
编辑: 如何查看当前可见片段
Fragment f = getFragmentManager().findFragmentById(R.id.container);
if (f instanceof HomeFragment) {
//do smth
}