9

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

4

2 に答える 2

2

getChildFragmentManager() の代わりに getFragmentManager() を使用します。

于 2016-05-11T14:19:02.417 に答える