我有一个ViewPager
,当应用程序启动时,由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分配一个新的Adapter:
@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): FATAL EXCEPTION: main 01-22 23:22:45.957: E/AndroidRuntime(13131): java.lang.IllegalStateException: Fragement no longer exists for key f0: index 0 01-22 23:22:45.957: E/AndroidRuntime(13131): at android.support.v4.app.FragmentManagerImpl.getFragment(FragmentManager.java:575) 01-22 23:22:45.957: E/AndroidRuntime(13131): at android.support.v4.app.FragmentStatePagerAdapter.restoreState(FragmentStatePagerAdapter.java:211) 01-22 23:22:45.957: E/AndroidRuntime(13131): at android.support.v4.view.ViewPager.onRestoreInstanceState(ViewPager.java:1281) 01-22 23:22:45.957: E/AndroidRuntime(13131): at android.view.View.dispatchRestoreInstanceState(View.java:13188) 01-22 23:22:45.957: E/AndroidRuntime(13131): at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2850) 01-22 23:22:45.957: E/AndroidRuntime(13131): at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2856) 01-22 23:22:45.957: E/AndroidRuntime(13131): at android.view.View.restoreHierarchyState(View.java:13166) 01-22 23:22:45.957: E/AndroidRuntime(13131): at android.support.v4.app.Fragment.restoreViewState(Fragment.java:425) ...
ViewPager
分配新的适配器而不使应用程序崩溃?