我的Fragment中的一个ViewPager有一个奇怪的问题。我有一个带有三个ViewPagerFragment
到现在为止一切正常。当应用启动时,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导致崩溃。
我不明白为什么会这样,因为它应该重新构建所有内容(因此也带有片段的适配器),就像第一次启动应用程序一样。
也许我认为这是不正确的?
我以前曾搜索过类似的问题,但与此异常有很多关联,但无法解决我的情况,我认为这是一个特殊的问题。

最佳答案

我想我已经解决了。如我所料,我的问题是我“重新启动”应用程序的方式。似乎它没有再次重新创建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);

10-07 19:47
查看更多