美文网首页Android开发Android技术知识从0到1__android开发
FragmentPagerAdapter 滑动过后界面不显示的解

FragmentPagerAdapter 滑动过后界面不显示的解

作者: 夏洛克的喵 | 来源:发表于2016-09-30 17:33 被阅读1059次

    最近工作中UI给出如图设计,心里想这个结合viewpager,fragment,FragmentPagerAdapter就能构建出来.

    这里写图片描述

    说干就干,写出如下代码(部分代码省略)

     @Override
        public Fragment getItem(int position) {
            AllNewsFragment result = null;
            Bundle bundle = new Bundle();
            switch (position) {
                case 0:
                    if (mAllNewsFragment == null) {
                        mAllNewsFragment = new AllNewsFragment();
                    }
                    result = mAllNewsFragment;
                    break;
                case 1:
                    if (mLastNewsFragment == null) {
                        mLastNewsFragment = new AllNewsFragment();
                    }
                    result = mLastNewsFragment;
                    break;
                case 2:
                    if (mShoppingGuideFragment == null) {
                        mShoppingGuideFragment = new AllNewsFragment();
                    }
                    result = mShoppingGuideFragment;
                    break;
                case 3:
                    if (mNewCarNewsFragment == null) {
                        mNewCarNewsFragment = new AllNewsFragment();
                    }
                    result = mNewCarNewsFragment;
                    break;
                case 4:
                    if (mEvaluatingFragment == null) {
                        mEvaluatingFragment = new AllNewsFragment();
                    }
                    result = mEvaluatingFragment;
                    break;
                default:
                    break;
            }
            return result;
        }
    

    实际效果一跑,懵了,左右来回滑动,界面数据全都没了,一片空白.
    立马在getItem代码中打断点,发现左右滑动时压根就没有调用getItem方法.
    出乎意料啊,赶紧看下FragmentPagerAdapter 官方文档

    Implementation of PagerAdapter that represents each page as a Fragment that is persistently kept in the fragment manager as long as the user can return to the page.

    结合其他google结果,大致意为FragmentPagerAdapter中所创建出来的fragment会被fragment manager保存,也即在内存中.

    实际运行时,滑动时会直接去内存中寻找.这样问题就可以断定为fragment再次添加到界面时数据丢失了,没有保存下来.这样就好办了,我们在frament中做数据保存处理即可.在fragment中加入类似代码:

      @Override
        public void onSaveInstanceState(Bundle outState) {
            super.onSaveInstanceState(outState);
            //做数据保存处理
        }
      
      @Override
        public void onViewStateRestored(@Nullable Bundle savedInstanceState) {
            super.onViewStateRestored(savedInstanceState);
            //做恢复数据处理
        }
    
     
    

    心想这下,该没有事了吧.代码一跑,滑动几次后妥妥还是白屏无数据.一怒之下再次
    google fragment 的数据恢复和保存处理.果然已有现成的解决方案.在此感谢泡在网上的日子的解决方案,我就不赘述了.

    结论:FragmentPagerAdapter和viewpager滑动白屏无数据,是由于恢复内存中的fragment的数据丢失,需要自己做手动保存和恢复数据,这样才能避免此情况的出现.

    相关文章

      网友评论

        本文标题:FragmentPagerAdapter 滑动过后界面不显示的解

        本文链接:https://www.haomeiwen.com/subject/dgfryttx.html