首页 > 解决方案 > 在 Fragment 中使用 viewPager 时在 Fragment 中崩溃

问题描述

我在 Fragment 中使用 ViewPager。我在 Crashlytics 中收到以下崩溃报告。请帮忙看看如何解决这个问题

Fatal Exception: java.lang.IllegalStateException
Child FragmentManager of MovieFragmentBase{9fa4a22 #1 id=0x7f0a0468 MovieFragmentBase} was not destroyed and this fragment is not retaining instance
android.support.v4.app.Fragment.performDetach (Unknown Source)
android.support.v4.app.FragmentManagerImpl.moveToState (Unknown Source)
android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState (Unknown Source)
android.support.v4.app.BackStackRecord.executePopOps (Unknown Source)
android.support.v4.app.FragmentManagerImpl.executeOps (Unknown Source)
android.support.v4.app.FragmentManagerImpl.executeOpsTogether (Unknown Source)
android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute (Unknown Source)
android.support.v4.app.FragmentManagerImpl.execPendingActions (Unknown Source)
android.support.v4.app.FragmentManagerImpl$1.run (Unknown Source)
android.os.Handler.handleCallback (Handler.java:822)
android.os.Handler.dispatchMessage (Handler.java:104)
android.os.Looper.loop (Looper.java:207)
android.app.ActivityThread.main (ActivityThread.java:5736)
java.lang.reflect.Method.invoke (Method.java)
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:910)
com.android.internal.os.ZygoteInit.main (ZygoteInit.java:771)

请检查我在 MovieFragmentBase 中使用的 viewPagerAdapter 的代码。

class ViewPagerAdapter extends FragmentStatePagerAdapter {
        private final List<Fragment> mFragmentList = new ArrayList<>();
        private final List<String> mFragmentTitleList = new ArrayList<>();

        public ViewPagerAdapter(FragmentManager manager) {
            super(manager);
        }

        @Override
        public Fragment getItem(int position) {
            return mFragmentList.get(position);
        }


        @Override
        public int getCount() {
            return mFragmentList.size();
        }

        public void addFragment(Fragment fragment, String title) {
            mFragmentList.add(fragment);
            mFragmentTitleList.add(title);
        }


        @Override
        public CharSequence getPageTitle(int position) {
            return mFragmentTitleList.get(position);
        }


    }

标签: androidandroid-fragmentsexceptionandroid-viewpager

解决方案


尝试添加setRetainInstance(true);onCreate()MovieFragmentBase,也许这会对你有所帮助

有关setRetainInstance 以下链接的更多信息

进一步理解 setRetainInstance(true)


推荐阅读