美文网首页
ViewPager+Fragment+ FragmentPage

ViewPager+Fragment+ FragmentPage

作者: 灰太狼_zq | 来源:发表于2018-01-10 16:29 被阅读2013次

    问题1:ViewPager 强制刷新问题
    在带屏项目中遇到如下问题:先看图


    效果图

    先分析布局:
    首先最外部是一个Activity,activity 里面定不出是标题栏,保存按钮等.接着是一个tablayout ,下面是可以滑动的,使用ViewPager来做,ViewPager 内部就是 我们的fragment啦.
    标题栏和下面的fragment对应,要求是除了自定义页面,还要显示7个菜谱即可,但是这里数量是根据本地菜谱来浮动的,举例
    本地存储了2个菜谱,那网络菜谱的数量=7-2
    本地存储了3个菜谱,那网络菜谱的数量=7-3
    这些都还好做
    麻烦的是顶部的开始(在自定义菜谱页,显示成保存),点击保存,就保存菜谱到本地数据,然后刷新这个activity 中的fragment .
    这样的代价是很大的,但是需求最大嘛.
    问题来了?在不销毁activity和控件的前提下怎么强制刷新所有的fragment?
    举例:当面页面有2个本地菜谱+4个网络菜谱,保存成功之后,变成3个本地菜谱+3个网络菜谱?
    我们ViewPager使用的数据源是FragmentPagerAdapter提供的?
    改变FragmentPagerAdapter的fragment数组数量?在刷新adapter ,我第一反应也是这样的.但是经过测试,根本无任何效果.所以想到,肯定是有复用机制啦,经过研究的确是有复用机制.
    必须使用fragment 的fragmentmanager来移除所有的fragment,在赋值新的fragmentlist(所以说这样性能代价太大啦)

     public void setFragments(List<Fragment> newFragmentList, String[] title) {
        this.title = title;//重新赋值顶部的title
        if (this.mFragmentList != null) {
            FragmentTransaction ft = fm.beginTransaction();//获得FragmentTransaction 事务
            for (Fragment f : this.mFragmentList) {
                ft.remove(f); //遍历删除fragment
            }
            ft.commit(); 
            ft = null;
            fm.executePendingTransactions();提交事务
        }
        this.mFragmentList = newFragmentList;//重新赋值
        notifyDataSetChanged(); 刷新界面
      }
    

    就这样就实现了强制刷新啦.

    问题2:Tablayout 和ViewPager的使用,标题栏一直不出现的问题
    Tablayout 和ViewPager结合使用是经常用到的案例,也是Android material design 的经典设计.
    将两者结合起来,只需要简单调用如下语句就可以了.
    mTablayout.setupWithViewPager(mViewPager);
    那Tablayout的标题从哪里来了?肯定是FragmentPagerAdapter 啦
    所以在FragmentPagerAdapter override 重新一下方法,
    写一个title的方法,果然有,getTitle,这不是吗?getTitle 就是这个,编译
    运行


    image.png

    可是怎么就是不出来了?肯定数据出了问题.一步一步的调试.发现数据没问题啊.难道是布局的问题,又回去检查XML 检查tablayout 的设置 等等....没办法,只有百度,各种方法试了个遍,都不行.....只有回去翻看以前的项目....
    才发现是方法重新错了......真是坑.......


    image.png

    相关文章

      网友评论

          本文标题:ViewPager+Fragment+ FragmentPage

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