重新启动应用程序时“IllegalStateException Fragment未附加到Activity”

时间:2014-02-27 09:26:17

标签: android fragment illegalstateexception

Fragment的一个ViewPager出现了一个奇怪的问题。我有一个ViewPager,其中有三个Fragment。 到目前为止,一切都运行良好。当应用程序启动时,ViewPager(带有FragmentPagerAdapter)附加了三个片段,这样我就可以毫无问题地从一个片段滑动到另一个片段。 当我尝试手动重启应用程序(注销后)时出现问题:

Intent i = getBaseContext().getPackageManager().getLaunchIntentForPackage( getBaseContext().getPackageName() );
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);

现在,当我尝试从片段中访问资源时,我注销并重新启动应用程序崩溃并通过IllegalStateException Fragment not attached to Activity

以下是我附加fragmentsadapter

的代码
public class AppSectionsPagerAdapter extends FragmentPagerAdapter {

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

        @Override
        public BaseListFragment getItem(int index) {

            switch (index) {
            case 0:
            case R.id.index_explore:


                BaseListFragment fragment0 = new Fragment0();
                fragment0.setUserVisibleHint(true);

                return fragment0;

            case 1:
            case R.id.index_main:

                if (fragment instanceof FragmentList)
                    ((FragmentList) fragment).removeMap();
                return new Fragment1();

            case 2:
            case R.id.index_my_stuff:

                BaseListFragment fragment2 = new Fragment2();
                fragment2.setUserVisibleHint(true);
                return fragment2;

            default:

                if (fragment instanceof FragmentList)
                    ((FragmentList) fragment).removeMap();

                return new Fragment1();

            }

        }

        @Override
        public int getCount() {
            return 3;
        }

    }

然后,我设置adpater

mAppSectionsPagerAdapter = new AppSectionsPagerAdapter(getSupportFragmentManager());

mViewPager.setAdapter(mAppSectionsPagerAdapter);

导致崩溃的是Fragment0。 我不明白它为什么会发生,因为它应该重新构建所有东西(所以带有片段的适配器)就像第一次启动应用程序时那样。 也许有一些我认为不正确的东西? 我以前搜索过一些类似的问题,并且有很多与此异常相关的内容,但不解决我的情况,我认为这是一个特殊问题。

1 个答案:

答案 0 :(得分:1)

我认为我已经解决了。正如我想的,我的问题是我“重启”应用程序的方式。它似乎没有再次重新创建MainActivity,因此它没有重新构建并附加所有fragments。 现在我以另一种方式restart,找到了here

的解决方案

为此目的使用Alarmmanager是否正确? 这是我使用的代码:

PendingIntent intent = PendingIntent.getActivity(this.getBaseContext(), 0, new Intent(getIntent()), getIntent().getFlags());
AlarmManager manager = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE);
manager.set(AlarmManager.RTC, System.currentTimeMillis(), intent);
System.exit(2);