アプリを再起動するときに、「IllegalStateExceptionフラグメントはアクティビティに添付されていません」
-
23-12-2019 - |
質問
私は私のFragment
の1つのViewPager
に奇妙な問題を抱えています。 ViewPager
を3つ持つFragment
があります。
すべてが今まで稼働していました。アプリが起動すると、ViewPager
(FragmentPagerAdapter
を使用する)が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
を介してアプリケーションのクラッシュを再開します。
fragments
、adapter
:
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);
.