viewPager+Fragment踩过的坑

最近由于项目需求,需要做问卷调查功能,点击上一题和下一题可以切换题目,做完第二道题目需要发网络请求,第三题是根据第二题的选项显示不同的题目,首先我想到的技术路线是:viewPager+Fragment+FragmentStatePagerAdapter,在此记录一下踩过的坑。

一、第一个坑:网络数据传不过去

重点是思路:首先我的想法是获取题目position,然后当position为1的时候,在activity里发网络请求,将数据添加到fragments里面,但是数据始终没有更新,为什么呢,好奇怪。后来百度了一堆资料,说是因为fragments在一开始的时候就预加载好了,你的数据根本就传不过去,那怎么做呢,在请教了大佬之后,大佬说:获取数据,更新数据,应该在fragment里面,通过EventBus发布“进行网络请求”事件,在fragment里面订阅事件,进行相应的操作。

在activity里发布事件

//LoadThirdDemandEvent 是定义的一个通知类,存放了选择了那一项selectIndex
    public void getThreeQuestion(int position) {
        LoadThirdDemandEvent e = new LoadThirdDemandEvent(position);
        EventBus.getDefault().post(e);
    }

在fragment里面获取通知

@Subscribe(threadMode = ThreadMode.MainThread)
    public void catchEvent(LoadThirdDemandEvent event) {
        //请求数据
        final int position = getArguments().getInt("position");
        if (position == 2) {
            requestData(event.getPosition());
        }
    }

多加一个 if (position == 2)的判断,是解决另外一个坑,如果不加这个限制,fragment会执行三次网络请求,会把前面的fragment数据都覆盖,如何请求数据,在此我就不写了,相信遇到这个问题的,难解决的重点是思路、思路。

二、第二个坑:来回切换,进行网络请求加载的页面会显示空白页

闲着无聊,对这个做题功能有点满意,心里有一点自豪,点着点着,没想到点出一个bug,进行网络请求加载的页面会显示空白页,同事说我有一个bug手,是不是 该转行去当测试,哈哈。

虽然测试没给我提出来,但是自己心里还是有些不安,我这个强迫症,不解决,没法好好吃饭睡觉了,经过我一番查找资料,找到了解决方案。

在代码中加入下面一行代码。既可解决。

//设置预加载的数量,防止白屏
 myViewpager.setOffscreenPageLimit(fragments.size());

出现白屏的原因是因为如果不设置的话,会预加载一页,当浏览到第四页在回来的时候,会重新在createView()一遍,就会把之前的数据覆盖。

等有空写好了代码在上传源码。

你可能感兴趣的:(Android进阶)