优化recyclerview的adapter代码

我们写一个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
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值