简化代码——RecyclerView.Adapter的封装

******************************BaseHolder*********************************

public class BaseHolder extends ViewHolder{

    private View itemView;
    private SparseArray<View> sa;

    public BaseHolder(View itemView) {
        super(itemView);
        this.itemView = itemView;
        sa = new SparseArray<>();
    }

    public <V extends View> V getView(int viewId) {
        View view = sa.get(viewId);
        if (null == view && null != itemView) {
            view = itemView.findViewById(viewId);
            sa.put(viewId, view);
        }
        return (V)view;
    }

    public BaseHolder setText(int viewId, String text) {
        TextView view = getView(viewId);
        view.setText(text);
        return this;
    }
    
    public BaseHolder setImgResource(int viewId, int imgId) {
        ImageView view = getView(viewId);
        view.setImageResource(imgId);
        return this;
    }
    
    public BaseHolder setImgBitmap(int viewId, Bitmap bitmap) {
        ImageView view = getView(viewId);
        view.setImageBitmap(bitmap);
        return this;
    }

}
 

*******************************BaseAdapter******************************
public abstract class BaseAdapter<T> extends RecyclerView.Adapter<BaseHolder> {
    private Context context;
    private int layoutId;
    private List<T> data;
    private View view;
    private OnItemClick onItemClick;

    protected BaseAdapter(Context context, int layoutId, List<T> data) {
        this.context = context;
        this.layoutId = layoutId;
        this.data = data;
    }

    @Override
    public int getItemCount() {
        return data.size();
    }

    @Override
    public BaseHolder onCreateViewHolder(ViewGroup parent, final int viewType) {
        view = LayoutInflater.from(context).inflate(layoutId, parent, false);
        return new BaseHolder(view);
    }

    @Override
    public void onBindViewHolder(BaseHolder holder, final int position) {

        bindViewHolder(holder, data.get(position), position);

        ****添加item的点击事件****
        view.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {

                if (null != onItemClick) {
                    onItemClick.itemClick(position);
                }
            }
        });
    }

    protected abstract void bindViewHolder(BaseHolder holder, T data, int position);

    ****设置item点击事件的接口****
    public void setOnClick(OnItemClick onItemClick ) {
        this.onItemClick = onItemClick;
    }

    public interface OnItemClick{
        void itemClick(int postion);
    }
}
*******************************封装完成,正常调用******************************
****集成封装好的adapter(感觉代码还是简化了很多的)****

public class PersonAdapter extends BaseAdapter<PersonEntity> {

    private Context context;

    public PersonAdapter(Context context, List<PersonEntity> date) {
        super(context, R.layout.item_person, date);
        this.context = context;
    }

    @Override
    protected void bindViewHolder(BaseHolder holder, final PersonEntity date, int position) {

        ****初始化并设置参数****
        holder.setText(R.id.name_tv, date.getName());

        监听item上面的某个view的点击事件
        holder.getView(R.id.name_tv).setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(context, ""+date.getName(), Toast.LENGTH_SHORT).show();

                ****这里也可以给外部提供一个回调接口,直接在外面处理点击某个view的业务逻辑****
             }
        });

    }
}
****加载adapter****

PersonAdapter adapter = new PersonAdapter(PersonActivity.this, listEntity);
LinearLayoutManager llm = new LinearLayoutManager(personActivity.this, LinearLayoutManager.VERTICAL, false);
recyclerView.setLayoutManager(llm);

****给item添加分割线,SimpleDividerItemDecoration是自定义的分割线****
recyclerView.addItemDecoration(new SimpleDividerItemDecoration(PersonActivity.this));
recyclerView.setAdapter(adapter);

****item的点击事件****
adapter.setOnClick(new OnItemClick() {
    @Override
    public void itemClick(int postion) {
        Toast.makeText(PersonActivity.this, "点击Item"+postion, Toast.LENGTH_SHORT).show();
    }
});



******************RecyclerView.Adapter封装完毕*******************

************************欢迎指正错误和不足********************



 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值