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