アプリの起動時にaViewPager
によって入力される があります。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
アプリをクラッシュさせずに新しいアダプタを に割り当てるにはどうすればよいですか?