我是Android新手,看起来在我对活动生命周期的理解中仍然缺少一些东西。我有一个使用FragmentActivity
创建的选项卡式应用程序。自定义ViewPager
正在管理选项卡的显示,在其中一个选项卡中,我想要一个简单的向下钻取,能够使用硬件“后退”按钮返回上一个视图的级别。
我通过检查标志的值(确定我们在下钻中的位置)将相应的Fragment
替换为选项卡来实现此向下钻取:
public class SectionsPagerAdapter extends FragmentStatePagerAdapter {
@Override
public Fragment getItem(int position) {
Fragment fragment;
switch (position) {
case 0 :
if (stateFlag == 0) fragment = (Fragment) new InitialFragment();
else fragment = (Fragment) new FinalResultsFragment();
break;
case 1:
fragment = (Fragment) new SecondTabFragment();
break;
default:
fragment = (Fragment) new ThirdTabFragment();
break;
}
return fragment;
}
要回到“上一个”片段,我会这样做:
@Override
public void onBackPressed() {
int p = mViewPager.getCurrentItem();
switch (p) {
case 0:
if (stateFlag == 0)) {
super.onBackPressed();
} else {
stateFlag = 0;
mViewPager.getAdapter().notifyDataSetChanged();
mViewPager.setCurrentItem(0);
}
break;
default:
super.onBackPressed();
break;
}
}
这很好用,直到我尝试更改方向。 Fragment
成功地从该更改中返回,但当我在FinalResultsFragment
状态下尝试按“返回”按钮时,我得到了
IllegalStateException: Fragment already active
E/AndroidRuntime(1094): at android.support.v4.view.PagerAdapter.notifyDataSetChanged(PagerAdapter.java:276)
为什么方向的改变打破了代码的这一特定部分?
编辑:
因此,如果我打开应用程序,第一个选项卡处于活动状态,我按下一个按钮,在该选项卡中加载不同的片段,然后按“返回”按钮 - 这一切都很好,第一个片段按预期加载。
但是如果我打开应用程序,第一个标签处于活动状态,我按下一个按钮,在该标签中加载不同的片段,旋转屏幕,片段重新加载就好了,然后按“返回”按钮 - 崩溃!< / p>
编辑:
这是完整的错误日志:http://pastebin.com/ESDTstsm