美文网首页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