Android IllegalStateException:调用notifyDataSetChanged时片段已处于活动状态

时间:2013-04-18 15:12:28

标签: android android-fragments

我是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

0 个答案:

没有答案