【发布时间】:2014-02-13 05:55:02
【问题描述】:
我有一个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 分配一个新的适配器:
@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 分配一个新的适配器而不会使应用程序崩溃?
【问题讨论】:
-
你试过了吗? stackoverflow.com/questions/12783571/… 编辑:我看到这是一年前的。
标签: android fragmentstatepageradapter