我的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
崩溃。这是我附加
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);
是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);