优化recyclerview的adapter代码
来源:互联网 发布:淘宝卖家号购买 编辑:程序博客网 时间:2024/05/21 17:33
我们写一个baseadapter代码,将recyclerview的公共部分抽离出来,然后提供接口
代码中使用了databinding
BaseAdapter.java
package com.yiba.oops.utils;import android.content.Context;import android.databinding.ViewDataBinding;import android.support.v7.widget.RecyclerView;import android.view.View;import android.view.ViewGroup;import com.yiba.oops.APP;import java.util.ArrayList;import java.util.List;/** * Created by Administrator on 2016/9/1. * READ ME * 对recyclerview的adapter和viewholder进行抽取,主要包含binding和item的点击事件,需要其他的可以自己添加 */public abstract class BaseAdapter<T> extends RecyclerView.Adapter<BaseAdapter.BaseViewHolder> { protected List<T> mList = new ArrayList<>(); protected Context mContext; private OnRecyclerItemClickListener mOnRecyclerItemClickListener; public interface OnRecyclerItemClickListener { boolean onRecyclerItemClick(RecyclerView.ViewHolder holder, View view, int position); } public BaseAdapter(List<T> list) { mContext = APP.getContext(); mList = list; } @Override public BaseAdapter.BaseViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { ViewDataBinding binding = getBinding(parent, viewType); return new BaseViewHolder(binding); } /** * 获取binding对象 */ protected abstract ViewDataBinding getBinding(ViewGroup parent, int viewType); @Override public void onBindViewHolder(BaseAdapter.BaseViewHolder holder, int position) { onBindingViewHolder(holder, position); } /** * 绑定viewholder **/ protected abstract void onBindingViewHolder(BaseAdapter.BaseViewHolder holder, int position); @Override public int getItemCount() { return mList == null ? 0 : mList.size(); } public void setOnRecyclerItemClickListener(OnRecyclerItemClickListener onRecyclerItemClickListener) { mOnRecyclerItemClickListener = onRecyclerItemClickListener; } public class BaseViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { private ViewDataBinding binding; public BaseViewHolder(View itemView) { super(itemView); initListener(); } public BaseViewHolder(ViewDataBinding binding) { super(binding.getRoot()); this.binding = binding; initListener(); } private void initListener() { itemView.setOnClickListener(this); } @Override public void onClick(View view) { if (mOnRecyclerItemClickListener != null) { mOnRecyclerItemClickListener.onRecyclerItemClick(this, view, getAdapterPosition()); } } public ViewDataBinding getBinding() { return binding; } }}
使用:
例:
ShareAdapter.java
/** * Created by ${xiaopao} on 2016/9/7. */public class ShareAdapter extends BaseAdapter<ShareFriends> {//BaseAdapter<ShareFriends> //继承BaseAdapter,<ShareFriends>是item的对象 public ShareAdapter(List<ShareFriends> list) { super(list); } @Override protected ViewDataBinding getBinding(ViewGroup parent, int viewType) { //这里返回databinding对象 return DataBindingUtil.inflate( LayoutInflater.from(mContext), R.layout.item_share_friends, parent, false ); }//这里进行item布局内容的设置 @Override protected void onBindingViewHolder(BaseAdapter.BaseViewHolder holder, final int position) { final ShareItemBinding sharebinding = (ShareItemBinding) holder.getBinding(); ShareFriends f = mList.get(position);// LogUtil.HDLog("name:" + f.getName() + " icon: " + f.getIcon()); String iconurl = f.getIcon(); String name = f.getName(); sharebinding.shareName.setText(name); Glide.with(mContext) .load(iconurl) .transform(new GlideCircleTransform(mActivity)) .placeholder(R.mipmap.ic_launcher) .error(R.mipmap.ic_launcher) .crossFade() .into(sharebinding.shareImg); if (mList.get(position).isChecked()) { sharebinding.shareCheck.setImageResource(R.drawable.selected); } else { sharebinding.shareCheck.setImageResource(R.drawable.unseleted); } }}
如果要增加点击事件:
//只需要设置setOnRecyclerItemClickListener即可。
adapter.setOnRecyclerItemClickListener(new BaseAdapter.OnRecyclerItemClickListener() { @Override public boolean onRecyclerItemClick(RecyclerView.ViewHolder holder, View view, int position) { if (sharelist.get(position).isChecked()) { sharelist.get(position).setChecked(false); } else { sharelist.get(position).setChecked(true); } adapter.notifyDataSetChanged(); return true; } });
BaseAdapter.java可以复制到工程里直接使用
1 0
- 优化recyclerview的adapter代码
- RecyclerView.Adapter的优化与封装
- RecyclerView.Adapter优化了吗?
- RecyclerView的ViewHolder和Adapter的封装优化
- RecyclerView+RecyclerView.Adapter+RecyclerView.ViewHolder的使用
- RecyclerView万能的Adapter
- RecyclerView的万能Adapter
- RecyclerView.Adapter的封装
- RecyclerView.Adapter的实现
- 万用RecyclerView.Adapter,不写重复的代码
- Adapter的优化和事列代码
- RecyclerView 的 RecyclerView.Adapter 通用版的实现
- RecyclerView的Adapter的抽取
- RecyclerView的Adapter最佳实战
- Recyclerview Adapter 的简单封装
- RecyclerView的Adapter万能适配包
- RecyclerView.Adapter 的简单封装
- 通用的RecyclerView Adapter适配器
- 收藏网址
- [Android测试] Appium的Java-client库api
- 深入学习Spring框架之七SpEL表达式装配
- 存储过程常用语句
- ubuntu快速搭建LAMP
- 优化recyclerview的adapter代码
- JVM启动参数与java.lang.OutOfMemoryError
- 关于icheck的使用
- CF370 D Memory and Scores
- 提取最长且不重复的子串
- wait() notify() notifyAll()小结
- CMD命令进行adb logcat时显示乱码的解决办法
- 广州某硬件厂商(校招做的非常好)面试总结-Android方向
- android framework service