kit*_*ttu 2 android android-fragments
我正在使用ViewPager将三个页面显示为片段FirstFragment,SecondFragment,ThirdFragment:
在ViewPager的第一页是FirstFragment,在按钮上单击我正在移动到FragmentA,然后在FragmentA中点击按钮我正在移动到FragmentB,它们在FragmentB中点击按钮,我正在移动到片段C.现在当我按回键时,我想按顺序进行:FragmentC,然后是FragmentB,然后是FragmentA,然后是FirstFragment(ViewPager第一页)
但是当我在FragmentC上按回键时,我正在退出应用程序:
然后我使用了以下解决方案
@Override
public void onBackPressed() {
// if there is a fragment and the back stack of this fragment is not empty,
// then emulate 'onBackPressed' behaviour, because in default, it is not working
FragmentManager fm = getSupportFragmentManager();
for (Fragment frag : fm.getFragments()) {
if (frag.isVisible()) {
FragmentManager childFm = frag.getChildFragmentManager();
if (childFm.getBackStackEntryCount() > 0) {
childFm.popBackStack();
return;
}
}
}
super.onBackPressed();
}
Run Code Online (Sandbox Code Playgroud)
只有当我有FirstFragment(ViewPager第一页)然后是FragmentA时,上述解决方案才有效
但是在嵌套片段的情况下这不起作用:FirstFragment(ViewPager First Page)然后是FragmentA,然后是FragmentB,然后是FragmentC
我通过以下方式解决了这个问题:
在ViewPager FirstFragment中,为了添加第一个嵌套片段FragmentA,我使用了getChildFragmentManager.
但是在FragmentA中单击按钮,用于添加FragmentB,并在FragmentB中单击按钮以添加FragmentC,我使用了getSupportFragmentManager.
也使用以下onBackPressed方法:
@Override
public void onBackPressed() {
FragmentManager fm = getSupportFragmentManager();
for (Fragment frag : fm.getFragments()) {
if (frag.isVisible()) {
FragmentManager childFm = frag.getChildFragmentManager();
if (childFm.getBackStackEntryCount() > 0) {
for (Fragment childfragnested: childFm.getFragments()) {
FragmentManager childFmNestManager = childfragnested.getFragmentManager();
if(childfragnested.isVisible()) {
childFmNestManager.popBackStack();
return;
}
}
}
}
}
super.onBackPressed();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2105 次 |
| 最近记录: |