当应用程序启动时,我有一个ViewPager
由 a 填充的:FragmentStatePagerAdapter
ViewPager mViewPager;
...
@Override
public void onViewCreated(View view, Bundle savedInstanceState)
{
super.onViewCreated(view, savedInstanceState);
mViewPager = (ViewPager) view.findViewById(R.id.viewpager);
mViewPager.setAdapter(new PageAdapter(getChildFragmentManager()));
//PageAdapter extends from FragmentStatePagerAdapter
}
这可以正常工作。
现在,当用户更改应用程序的设置时,我想为 ViewPager 分配一个新的适配器,如下所示:
@Override
public void updateObserver(SETTING_KEY key)
{
mViewPager.setAdapter(new PageAdapter(getChildFragmentManager()));
Log.d("info", "updating");
}
updateObserver
不幸的是,应用程序在调用此异常后崩溃:
01-22 23:22:45.957:E/AndroidRuntime(13131):致命异常:主要 01-22 23:22:45.957:E/AndroidRuntime(13131):java.lang.IllegalStateException:密钥 f0 的片段不再存在:索引 0 01-22 23:22:45.957: E/AndroidRuntime(13131): 在 android.support.v4.app.FragmentManagerImpl.getFragment(FragmentManager.java:575) 01-22 23:22:45.957: E/AndroidRuntime( 13131): 在 android.support.v4.app.FragmentStatePagerAdapter.restoreState(FragmentStatePagerAdapter.java:211) 01-22 23:22:45.957: E/AndroidRuntime(13131): 在 android.support.v4.view.ViewPager.onRestoreInstanceState (ViewPager.java:1281) 01-22 23:22:45.957: E/AndroidRuntime(13131): 在 android.view.View.dispatchRestoreInstanceState(View.java:13188) 01-22 23:22:45.957: E/AndroidRuntime (13131): 在 android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2850) 01-22 23:22:45.957: E/AndroidRuntime(13131): 在 android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2856) 01-22 23:22:45.957: E/AndroidRuntime(13131): 在android.view.View.restoreHierarchyState(View.java:13166) 01-22 23:22:45.957: E/AndroidRuntime(13131): 在 android.support.v4.app.Fragment.restoreViewState(Fragment.java:425) 。 ..
如何在ViewPager
不崩溃应用程序的情况下将新适配器分配给?