Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 具有旧活动引用的FragmentManager(java.lang.IllegalStateException)_Android_Android Fragments_Android Fragmentactivity_Fragmentmanager - Fatal编程技术网

Android 具有旧活动引用的FragmentManager(java.lang.IllegalStateException)

Android 具有旧活动引用的FragmentManager(java.lang.IllegalStateException),android,android-fragments,android-fragmentactivity,fragmentmanager,Android,Android Fragments,Android Fragmentactivity,Fragmentmanager,我正在使用v4库开发一个应用程序。在一个碎片活动中,我有一个碎片页雷达,上面放着我的碎片。在浏览完所有片段后,我对活动调用Finish()。现在情况变得复杂了:重新启动应用程序时(不是通过TaskManager完全关闭),屏幕保持白色,系统显示: 12-01 09:49:44.933 10161-10161/com.xxx.yyy W/System.err﹕ java.lang.IllegalStateException:活动已被销毁 12-01 09:49:44.933 10161-10161

我正在使用v4库开发一个应用程序。在一个碎片活动中,我有一个碎片页雷达,上面放着我的碎片。在浏览完所有片段后,我对活动调用Finish()。现在情况变得复杂了:重新启动应用程序时(不是通过TaskManager完全关闭),屏幕保持白色,系统显示:

12-01 09:49:44.933 10161-10161/com.xxx.yyy W/System.err﹕ java.lang.IllegalStateException:活动已被销毁 12-01 09:49:44.933 10161-10161/com.xxx.yyy W/System.err﹕ 位于android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1387) 12-01 09:49:44.933 10161-10161/com.xxx.yyy W/System.err﹕ 位于android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:636) 12-01 09:49:44.933 10161-10161/com.xxx.yyy W/System.err﹕ 在android.support.v4.app.BackStackRecord.commitAllowingStateLoss(BackStackRecord.java:619)中 12-01 09:49:44.933 10161-10161/com.xxx.yyy W/System.err﹕ 在android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:139)上 12-01 09:49:44.933 10161-10161/com.xxx.yyy W/System.err﹕ 位于android.support.v4.view.ViewPager.setAdapter(ViewPager.java:420) 12-01 09:49:44.933 10161-10161/com.xxx.yyy W/System.err﹕ 位于com.yyy.zzz_lib.ui.AbstractQuestionNaiResponsibility.setUpLayout(AbstractQuestionNaiResponsibility.java:78) 12-01 09:49:44.933 10161-10161/com.xxx.yyy W/System.err﹕ 位于com.yyy.zzz.questionnaiareactivity.setContent(questionnaiareactivity.java:58) 12-01 09:49:44.933 10161-10161/com.xxx.yyy W/System.err﹕ 位于com.yyy.zzz.questionnaiareactivity.handleMessage(questionnaiareactivity.java:100) 12-01 09:49:44.933 10161-10161/com.xxx.yyy W/System.err﹕ 位于android.os.Handler.dispatchMessage(Handler.java:98) 12-01 09:49:44.933 10161-10161/com.xxx.yyy W/System.err﹕ 位于android.os.Looper.loop(Looper.java:136) 12-01 09:49:44.933 10161-10161/com.xxx.yyy W/System.err﹕ 位于android.app.ActivityThread.main(ActivityThread.java:5586) 12-01 09:49:44.933 10161-10161/com.xxx.yyy W/System.err﹕ 位于java.lang.reflect.Method.Invokenactive(本机方法) 12-01 09:49:44.933 10161-10161/com.xxx.yyy W/System.err﹕ 位于java.lang.reflect.Method.invoke(Method.java:515) 12-01 09:49:44.933 10161-10161/com.xxx.yyy W/System.err﹕ 在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run上(ZygoteInit.java:1268) 12-01 09:49:44.933 10161-10161/com.xxx.yyy W/System.err﹕ 位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1084) 12-01 09:49:44.933 10161-10161/com.xxx.yyy W/System.err﹕ 在dalvik.system.NativeStart.main(本机方法)

调试一段时间后,我注意到当我重新打开活动时,FM上仍然有对最后一个活动的旧引用,后来在ViewPager上设置适配器时,活动为空,应用程序崩溃。当通过TaskManager清理整个应用程序时,所有应用程序都会再次正确运行一次。
我尝试了几种方法:弹出整个后堆栈,保存对FragmentManager的新引用,使用Fragment.retainInstanceState()等等。。不幸的是,一切都没有结果。我看不出有可能获得FragmentManager的干净实例。有人能帮我解决这个问题吗

更新:一些代码片段:

public abstract class AbstractQuestionnaireActivity extends FragmentActivity {

  private QuestionnaireModel mQuestionnaireModel;

  private QuestionnaireViewPager mPager;
  private QuestionnairePagerAdapter mPagerAdapter;

  public void setUpLayout(int layoutRoot) {

    try {
      FrameLayout root = (FrameLayout) findViewById(layoutRoot);

      //inflate questionnaire layout
      View questionnaire = LayoutInflater.from(this).inflate(R.layout.elem_questionnaire, null);
      root.addView(questionnaire);

      mPagerAdapter = new QuestionnairePagerAdapter(getSupportFragmentManager());
      mPager = (QuestionnaireViewPager) findViewById(R.id.pager);
      mPager.setPagingEnabled(false);
      mPager.setAdapter(mPagerAdapter);

      ...

    } catch (ClassCastException e) {
      throw new ClassCastException("Layout root must be a FrameLayout!");
    } catch (Exception e) {
      e.printStackTrace();
    }
  }

  ...

  public class QuestionnairePagerAdapter extends FragmentPagerAdapter {

    public QuestionnairePagerAdapter(FragmentManager fm) {
      super(fm);
    }

    @Override
    public Fragment getItem(int pos) {
      return mQuestionnaireModel.getQuestions().get(pos).createFragment(pos);
    }

    @Override
    public int getCount() {
      return mQuestionnaireModel.getQuestions().size();
    }
  }
}

您能显示您所指的相关代码吗?