如何在最后一个片段后压上从最后一个片段重定向到特定片段
How to redirect from last fragment to specific fragment on last fragment backpress
我在从 Backstack
中删除特定 Fragment
时遇到问题。
比如,我有五个 Fragments A -> B -> C -> D -> E
和所有 Fragments
调用来自同一个 Activity with add to Backstack
并且添加不使用替换。
Calling order; A -> B -> C -> D -> E
.
当 Fragment-E (last fragment)
是我当前的 Fragment
并按下 Back Button
然后我想去 Fragment-B
。这意味着我不需要 Fragment-C, Fragment-D and Fragment-E
.
此外,当 Fragment B
存在并按下 back button
时,将调用 Fragment A
。这也会同时发生在所有 fragment
上。
还有一件事所有 Fragment
调用 API
从 server
中获取数据并填充到列表中。
帮助实现这个场景。
您有一个名为 instanceof
的方法用于 Fragments
。因此,当您处于 Fragment E
时,请尝试检查
同时添加 fragmentTransaction.addToBackStack("fragmentC");
if(currentFragment instanceOf FragmentE) {
fragmentManager.popBackStack ("fragmentC", FragmentManager.POP_BACK_STACK_INCLUSIVE);
}
您需要 override onBackPressed()
在您的 Activity
中,从您添加的地方 Fragment
。
您可以创建自己的逻辑。比如检查 current fragment
是否为 instanceof FragmentE
您需要调用 getFragmentManager().popBackStack();
三次才能删除 Fragments C -> D -> E
@Override
public void onBackPressed() {
if (getFragmentManager().getBackStackEntryCount() > 0) {
if(getFragmentManager().findFragmentById(R.id.ad_container) instanceof FragmentE) {
getFragmentManager().popBackStack();
getFragmentManager().popBackStack();
getFragmentManager().popBackStack();
// pop fragment D,C from backstack
// navigate to fragment B
}
} else {
super.onBackPressed();
}
}
希望对您有所帮助
在你 activity 覆盖 onBackPressed() 方法并添加以下代码
@Override
public void onBackPressed() {
Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.fragment_container);
if (getSupportFragmentManager().getBackStackEntryCount() > 0) {
if (fragment instanceof FragmentE) {
getSupportFragmentManager().popBackStack ("fragmentC", FragmentManager.POP_BACK_STACK_INCLUSIVE);
}
} else {
super.onBackPressed();
}
}
记住在添加每个片段时不要忘记在 transaction.commit();
之前添加 .addToBackStack("whichFragment")
。
getSupportFragmentManager().popBackStack ("fragmentC", FragmentManager.POP_BACK_STACK_INCLUSIVE) //this essentially means also remove FragmentC
我在从 Backstack
中删除特定 Fragment
时遇到问题。
比如,我有五个 Fragments A -> B -> C -> D -> E
和所有 Fragments
调用来自同一个 Activity with add to Backstack
并且添加不使用替换。
Calling order; A -> B -> C -> D -> E
.
当 Fragment-E (last fragment)
是我当前的 Fragment
并按下 Back Button
然后我想去 Fragment-B
。这意味着我不需要 Fragment-C, Fragment-D and Fragment-E
.
此外,当 Fragment B
存在并按下 back button
时,将调用 Fragment A
。这也会同时发生在所有 fragment
上。
还有一件事所有 Fragment
调用 API
从 server
中获取数据并填充到列表中。
帮助实现这个场景。
您有一个名为 instanceof
的方法用于 Fragments
。因此,当您处于 Fragment E
时,请尝试检查
同时添加 fragmentTransaction.addToBackStack("fragmentC");
if(currentFragment instanceOf FragmentE) {
fragmentManager.popBackStack ("fragmentC", FragmentManager.POP_BACK_STACK_INCLUSIVE);
}
您需要 override onBackPressed()
在您的 Activity
中,从您添加的地方 Fragment
。
您可以创建自己的逻辑。比如检查 current fragment
是否为 instanceof FragmentE
您需要调用 getFragmentManager().popBackStack();
三次才能删除 Fragments C -> D -> E
@Override
public void onBackPressed() {
if (getFragmentManager().getBackStackEntryCount() > 0) {
if(getFragmentManager().findFragmentById(R.id.ad_container) instanceof FragmentE) {
getFragmentManager().popBackStack();
getFragmentManager().popBackStack();
getFragmentManager().popBackStack();
// pop fragment D,C from backstack
// navigate to fragment B
}
} else {
super.onBackPressed();
}
}
希望对您有所帮助
在你 activity 覆盖 onBackPressed() 方法并添加以下代码
@Override
public void onBackPressed() {
Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.fragment_container);
if (getSupportFragmentManager().getBackStackEntryCount() > 0) {
if (fragment instanceof FragmentE) {
getSupportFragmentManager().popBackStack ("fragmentC", FragmentManager.POP_BACK_STACK_INCLUSIVE);
}
} else {
super.onBackPressed();
}
}
记住在添加每个片段时不要忘记在 transaction.commit();
之前添加 .addToBackStack("whichFragment")
。
getSupportFragmentManager().popBackStack ("fragmentC", FragmentManager.POP_BACK_STACK_INCLUSIVE) //this essentially means also remove FragmentC