BaseRecyclerAdapter之添加不同布局(优化篇)
来源:互联网 发布:java 通过ip获取地址 编辑:程序博客网 时间:2024/06/06 17:08
由于之前发了篇「BaseRecyclerAdapter之添加不同布局(头部尾部)」收到了以下反馈,在此非常感谢,宝贵建议!希望加群多多提建议,让这个项目更加好用,帮助到更多人。
目前已优化:「GitHub源码地址」
效果如何?
优化前:
public class MultipleItemAdapter extends BaseQuickAdapter<String> { private final int TEXT_TYPE = 1; private int mTextLayoutResId; public MultipleItemAdapter(Context context, List data, int... layoutResId) { super(context, layoutResId[0], data); mTextLayoutResId = layoutResId[1]; } @Override protected int getDefItemViewType(int position) { if (position % 2 == 0) return TEXT_TYPE; return super.getDefItemViewType(position); } @Override protected BaseViewHolder onCreateDefViewHolder(ViewGroup parent, int viewType) { if (viewType == TEXT_TYPE) return new TextViewHolder(getItemView(mTextLayoutResId, parent)); return super.onCreateDefViewHolder(parent, viewType); } @Override protected void onBindDefViewHolder(BaseViewHolder holder, String item) { if (holder instanceof TextViewHolder) holder.setText(R.id.tv, item); } @Override protected void convert(BaseViewHolder helper, String item) { helper.setImageUrl(R.id.iv, item); } public class TextViewHolder extends BaseViewHolder { public TextViewHolder(View itemView) { super(itemView.getContext(), itemView); } }}
优化后(瘦身二分之一):
public class MultipleItemQuickAdapter extends BaseMultiItemQuickAdapter<MultipleItem> { public MultipleItemQuickAdapter(Context context, List data) { super(context, data); addItmeType(MultipleItem.TEXT, R.layout.text_view); addItmeType(MultipleItem.IMG, R.layout.image_view); } @Override protected void convert(BaseViewHolder helper, MultipleItem item) { switch (helper.getItemViewType()) { case MultipleItem.TEXT: helper.setImageUrl(R.id.tv, item.getContent()); break; case MultipleItem.IMG: helper.setImageUrl(R.id.iv, item.getContent()); break; } }}
原理分析
由于上篇说了写多个不同类型的布局一定会用到getItemViewType
和onCreateViewHolder
方法,但是在优化后的代码中没看到,怎么做的到呢?
优化前:getDefItemViewType
protected int getDefItemViewType(int position) { if (position % 2 == 0) return TEXT_TYPE; return super.getDefItemViewType(position); }
优化后不用写:getDefItemViewType
,看看基类的处理
@Overrideprotected int getDefItemViewType(int position) { return mData.get(position).getItemType();}
原理分析:在填充数据的时候就把view type给添加进去了。
优化前:onCreateDefViewHolder
@Overrideprotected BaseViewHolder onCreateDefViewHolder(ViewGroup parent, int viewType) { if (viewType == TEXT_TYPE) return new TextViewHolder(getItemView(mTextLayoutResId, parent)); return super.onCreateDefViewHolder(parent, viewType);}
优化后不用写:onCreateDefViewHolder
,看看基类的处理
private SparseArray<Integer> layouts;protected BaseViewHolder onCreateDefViewHolder(ViewGroup parent, int viewType) { int layoutId = getLayoutId(viewType); View view = LayoutInflater.from(parent.getContext()).inflate(layoutId, parent, false); return new BaseViewHolder(mContext, view);}private int getLayoutId(int viewType) { return layouts.get(viewType);}protected void addItmeType(int type, int layoutResId) { if (layouts == null) { layouts = new SparseArray<>(); } layouts.put(type, layoutResId);}
原理分析:addItmeType
以type为键以layoutResId为值存储到的SparseArray里面,在onCreateDefViewHolder
根据viewType来获取相应的layoutResId。
每次收获一点点,后续还会扩展更多功能,供大家使用及学习「BaseRecyclerViewAdapterHelper」。
1 0
- BaseRecyclerAdapter之添加不同布局(优化篇)
- BaseRecyclerAdapter之添加不同布局(头部尾部)
- BaseRecyclerAdapter之添加不同布局(头部尾部)
- BaseRecyclerAdapter之添加不同布局(头部尾部)
- BaseRecyclerAdapter之添加动画
- RecyclerView之添加不同的item布局
- Android 之BaseRecyclerAdapter封装
- RecyclerView 封装Adapter之BaseRecyclerAdapter
- Android性能优化之布局优化篇
- Android性能优化之布局优化篇
- Listview使用BaseAdapter添加不同布局
- 性能优化之布局优化
- 性能优化之布局优化
- 性能优化之布局优化
- 性能优化之布局优化
- 性能优化之布局优化
- 性能优化之布局优化
- 性能优化之布局优化
- 使用mysqladmin命令修改Mysql密码
- java 命令
- 网易游戏的一道题目
- linux下实现两个线程之间的通信
- mac 常用快捷键1:
- BaseRecyclerAdapter之添加不同布局(优化篇)
- idea 快捷键1
- 轻量级的储存:SharedPreferences的一个例子
- 一些思路
- Qt(一)--- QSS的语法
- 快速幂
- 如何对拍数据
- Adobe源码泄漏?3行代码搞定,Flash动画无缝导入Android/iOS/cocos2dx(一)
- JavaWeb 案例——访问权限控制