Open yangchong211 opened 6 years ago
我们这边的项目目前用你的这个框架已经有一年多了,发现了一些问题: 1.当数据不足的时候,会走两遍setMore方法 2.当瀑布流显示大小规格不同的图片,上拉加载更多有问题 3.当一个页面有自定义头部【包含轮播图或者其他控件】,还有list数据的时候。如果设置加载中状态,则是整个页面显示加载中。而我们的产品要求,只要局部页面刷新。 4.如果想要实现那种复杂的页面【例如,不同类型list,类似商城那种】,目前做法是在继承你封装的adapter处理不同类型item的布局,将不同类型实体类汇总到一个实体类。但是随着后来ui更改,以及添加或删除功能,而且RecyclerArrayAdapter<实体类>,由于不同item的返回实体类字段不一样,而这个时候便很难优雅处理多种类型。所以我想在你的源代码基础上做些更改,和同事在你的代码基础上封装库,不知道是否可以? 5.在swipe包中的SwipeRefreshLayout类,可以直接使用谷歌官方的SwipeRefreshLayout类,这样swipe包中那几个类都可以去掉。不得不说,在之前官方没有发布刷新控件时,就能够写出该自定义控件。水平还是相当高呀,大神,佩服!! 6.我安装阿里编码规约插件后,黄色警告和提示部分实在太多 7.在BaseViewHolder中为了减少findviewbyid,可以复用,比如:
// SparseArray 比 HashMap 更省内存,在某些条件下性能更好,只能存储 key 为 int 类型的数据, // 用来存放 View 以减少 findViewById 的次数 private SparseArray<View> viewSparseArray; public BaseViewHolder(ViewGroup parent, @LayoutRes int res) { super(LayoutInflater.from(parent.getContext()).inflate(res, parent, false)); if(viewSparseArray==null){ viewSparseArray = new SparseArray<>(); } } /** * 根据 ID 来获取 View * @param viewId viewID * @param <T> 泛型 * @return 将结果强转为 View 或 View 的子类型 */ @SuppressWarnings("unchecked") protected <T extends View> T getView(int viewId) { // 先从缓存中找,找打的话则直接返回 // 如果找不到则 findViewById ,再把结果存入缓存中 View view = viewSparseArray.get(viewId); if (view == null) { view = itemView.findViewById(viewId); viewSparseArray.put(viewId, view); } return (T) view; }
两只黄鹂鸣翠柳,一行白鹭上青天
厉害了,南无大乘妙法莲华经
牛逼啊~ 好像没看懂几条
我们这边的项目目前用你的这个框架已经有一年多了,发现了一些问题: 1.当数据不足的时候,会走两遍setMore方法 2.当瀑布流显示大小规格不同的图片,上拉加载更多有问题 3.当一个页面有自定义头部【包含轮播图或者其他控件】,还有list数据的时候。如果设置加载中状态,则是整个页面显示加载中。而我们的产品要求,只要局部页面刷新。 4.如果想要实现那种复杂的页面【例如,不同类型list,类似商城那种】,目前做法是在继承你封装的adapter处理不同类型item的布局,将不同类型实体类汇总到一个实体类。但是随着后来ui更改,以及添加或删除功能,而且RecyclerArrayAdapter<实体类>,由于不同item的返回实体类字段不一样,而这个时候便很难优雅处理多种类型。所以我想在你的源代码基础上做些更改,和同事在你的代码基础上封装库,不知道是否可以? 5.在swipe包中的SwipeRefreshLayout类,可以直接使用谷歌官方的SwipeRefreshLayout类,这样swipe包中那几个类都可以去掉。不得不说,在之前官方没有发布刷新控件时,就能够写出该自定义控件。水平还是相当高呀,大神,佩服!! 6.我安装阿里编码规约插件后,黄色警告和提示部分实在太多 7.在BaseViewHolder中为了减少findviewbyid,可以复用,比如: