本篇文章掺杂了过多的作者个人思维,不利于读者阅读,新写了一篇对读者非常友好、条理清晰的BaseRecyclerViewFragment,地址

http://blog.csdn.net/qq_36523667/article/details/78721251

之前一篇文章已经把recyclerview尽可能简化了,这里再简化一步,仅仅在子类中写出操作即可

BaseRecyclerViewFragment

public abstract class BaseRecyclerViewFragment<T> extends BaseFragment {private RecyclerView recyclerView;
    private List<T> list;
    private int itemLayoutId;
    private String orientation;

//    取得所有RecyclerView相关
    protected abstract Map<String, Object> getMap();

//    对item及其子view的操作
    protected abstract void initRecyclerViewOperate(ViewHolder holder, T t);

//    从Map中取出所有RecyclerView相关
    @Override
    protected void initData() {Map<String, Object> map = getMap();

        recyclerView = (RecyclerView)map.get("RecyclerView");
        list = (List<T>)map.get("List");
        itemLayoutId = (Integer) map.get("ItemLayoutId");
        orientation = map.get("Orientation")+"";

    }//    取得adapter
    private CommonAdapter initRecyclerViewAdapter() {return new CommonAdapter<T>(getContext(), itemLayoutId, list){@Override
            protected void convert(ViewHolder holder, T t, int position) {initRecyclerViewOperate(holder, t);
            }};
    }@Override
    protected void initWidget(View root) {LinearLayoutManager layoutManager = new LinearLayoutManager(getContext());

//        判断方向
        if (orientation.equals("horizontal")){layoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
        }//        获取adapter
        CommonAdapter adapter = initRecyclerViewAdapter();

        recyclerView.setLayoutManager(layoutManager);
        recyclerView.setAdapter(adapter);

    }//abstract getLayoutId
}

所以在子类中只需要这样,真正地符合了开闭原则

public class VideoFragment extends BaseRecyclerViewFragment<TypeListBean> {//    布局
    @Override
    protected int getLayoutId() {return R.layout.fragment_course_video;
    }//    RecyclerView
    @BindView(R.id.recycler_view)RecyclerView mRecyclerView;

    //    RecyclerView data
    private List<TypeListBean> typeList;

    //    rec data from net
    @Override
    protected void initData() {typeList = new ArrayList<>();

        TypeListBean typeListBean = new TypeListBean();
        typeListBean.setUrl("http://bunengshuodemimi:8080/fitapp/list1_fit_type/zengji.jpg");
        typeListBean.setTitle("增肌");

        typeList.add(typeListBean);

        super.initData();
    }//    recyclerView相关
    @Override
    protected Map<String, Object> getMap() {Map<String, Object> map = new HashMap<>();

        map.put("RecyclerView", mRecyclerView);
        map.put("List", typeList);
        map.put("ItemLayoutId", R.layout.item_rec_type);
        map.put("Orientation", "vertical");

        return map;
    }//    recyclerView操作
    @Override
    protected void initRecyclerViewOperate(ViewHolder holder, TypeListBean typeListBean) {
//        设置标题
        holder.setText(R.id.type_title, typeListBean.getTitle());

//        设置背景
        ImageView mImageView = holder.getView(R.id.type_image);
        Glide.with(getActivity()).load(typeListBean.getUrl()).into(mImageView);
    }
}

RecyclerView的极尽升华:BaseRecyclerViewFragment相关推荐

  1. RecyclerView的极尽升华:BaseRecyclerViewFragment(修改)

    之前有写一篇,东西很好,但是掺杂上我自己的东西,显得不太好.所以这里写一个通俗易懂,清新优雅的版本.既可以简化读者在面对大量RecyclerView时的操作,也可以让读者在阅读本文时,有所收获. 先提 ...

  2. 猫狗大战----类的实例化和继承,带你看懂类方法的使用

    用python编写程序,实现猫狗大战小游戏情景,让你更好的了解类方法的使用! 要求: 1.可创建多个猫和狗的对象,并初始化每只猫和狗(包括昵称.品种.攻击力.生命值,速度等属性). 2.猫可以攻击狗, ...

  3. fastjson 是反射吗_这就是GTA6吗?五款画面效果逆天的《GTA5》顶级mod

    原标题:这就是GTA6吗?五款画面效果逆天的<GTA5>顶级mod 首发于2013年的<侠盗猎车手5>至今依然非常畅销,而它的PC版也不断涌现出各种mod.虽然GTA6还遥遥无 ...

  4. 极客新闻——13、美团到餐研发团队资源成本优化实践

    本文笔记全部来自<极客新闻>--新鲜的技术资讯.权威的趋势剖析.别样的技术洞察 工程师主要面对的是技术挑战,更关注技术层面的目标.研发团队的管理者则会把实现项目成果和业务需求作为核心目标. ...

  5. recyclerview 滚动冲突_如何处理手势冲突 | 手势导航连载 (三)

    作者 / Chris Banes, Android 开发者关系团队工程师 我们将在近期为大家带来一个关于 "手势导航" 的系列连载,本文是手势导航连载的第三篇,如果您希望查看前两篇 ...

  6. 阳台花园不只美丽-东方美琪·安琪:身心健康谋定心灵升华

    阳台花园不只美丽-东方美琪·安琪:身心健康谋定心灵升华 "相信拥有一个种满花的院子,是每一个人曾经的梦想,阳光下在花园里喝茶.夜晚在花园里乘凉,春天看百花盛放,夏天听虫鸣私语,秋天有习习凉风 ...

  7. Android RecyclerView和ScrollView嵌套使用

    我们的recyclerView有多个layoutmanager,通过重写layoutmanager的方法就可以让recyclerView和ScrollView嵌套了.但是请注意,如果recyclerV ...

  8. 九大神招,让Python里数据分析神器Jupyter,完美升华

    九大神招,让Python里数据分析神器Jupyter,完美升华 Notebook作为一款经典的交互式编辑器,在视图数据等实时展示方面有其特有的优势,但是相比pycharm.sublime等编辑工具,J ...

  9. MVVM架构之自动增删改的极简RecycleView的实现

    先上个源代码的链接:github.com/whenSunSet/- RecycleView是Google替代ListView的一种方案,其有着很高的解耦度,让许多开发者抛弃了以往的ListView,那 ...

最新文章

  1. 发送快递:配置静态路由
  2. 面试官问我:平常如何对你的Java程序进行调优?
  3. python编程案例教程书籍-清华大学出版社-图书详情-《Python开发案例教程》
  4. IIS 7.0的ASP.NET应用程序生命周期概述
  5. 查看进程状态信息命令 jps - (Java Virtual Machine Process Status Tool)
  6. LeetCode 1185. 一周中的第几天
  7. mysql使用裸设备_请教dd清空裸设备问题
  8. 【转】HashMap,ArrayMap,SparseArray源码分析及性能对比
  9. 进击的雨燕------------错误处理
  10. StretchDIBits函数显示图片
  11. 分享一个去水印接口,完全免费,早点下手啊
  12. 【技术指标】MACD详解
  13. windows7计算机用户账户,浅析win7旗舰版系统中三种系统用户账户的特点
  14. SQL Cookbook 系列 - 若干另类目标
  15. js监听iframe是否加载完毕
  16. nginx搭建及配置
  17. Axure 进阶 | 制作携程网酒店“入住日期”与“退房日期”控件
  18. 黑色温敏性PNIPAM-AuNPs/CHOL-AuNPs纳米金粒修饰聚合物的制备过程
  19. TensorBoard对训练过程可视化(不用tf.summaries.merge_all)
  20. Centos7配置 yum代理

热门文章

  1. chgrp、chmod和chown命令-改变文件的权限和属性
  2. qdialog修改标题栏图标_QT5学习之路 设置窗口标题、设置程序任务栏图标-Go语言中文社区...
  3. 浩辰3D软件中有哪些尺寸类型?
  4. Windows 10驱动开发入门(一):环境搭建
  5. RAII + 接口模式
  6. 淡淡的话1(转自小木虫)
  7. php 安装 pear,PHP PEAR安装出错导致PEAR命令无法使用
  8. 高性能msyql读书日志
  9. XnView v2.25
  10. Caesar Cipher