アプリを再起動するときに、「IllegalStateExceptionフラグメントはアクティビティに添付されていません」

StackOverflow https://stackoverflow.com//questions/22064163

質問

私は私のFragmentの1つのViewPagerに奇妙な問題を抱えています。 ViewPagerを3つ持つFragmentがあります。 すべてが今まで稼働していました。アプリが起動すると、ViewPagerFragmentPagerAdapterを使用する)が3つのフラグメントを接続しているため、問題なくスワイプをナビゲートできます。 そのように(ログアウトした後)アプリを手動で再起動しようとしたときに問題が発生しました:

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

LogOutとAppは、フラグメントのONからのリソースにアクセスしようとしたときにアプリケーションがクラッシュし、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);
.

クラッシュを引き起こすフラグメント0です。 それがすべてを再構築する必要があるのは理由は理解できません(したがって、フラグメントを持つアダプタもあります)。アプリケーションが初めて起動したときにそうします。 たぶん私が正しくないと仮定していることがあるでしょうか? 私は以前にいくつかの類似の質問を検索しています、そしてこの例外とはたくさんありますが、私の訴訟を解決しないでください、私は特定のものだと思います。

役に立ちましたか?

解決

私はすでに解決したと思います。私が思ったように、私の問題は私がアプリを「再起動」していた方法でした。それはそれが再度再現性を再作成しなかったので、すべてのfragmentsを再構築して添付していません。 今、私は別の方法でrestartここ

この目的のために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);
.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top