RecyclerView的基类写法

RecyclerView的基类写法

KLBaseRecyclerAdapter\<T>

package com.xxx.recyclerviewdemo.adapter;

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by WangQing on 15/11/16.
 */
public abstract class KLBaseRecyclerAdapter<T> extends RecyclerView.Adapter {

    protected Context mContext;
    protected LayoutInflater mInflater;
    protected List<T> datas = new ArrayList<T>();

    private View.OnClickListener onClickListener ;

    public KLBaseRecyclerAdapter(Context context) {
        super();
        this.mContext = context;
        this.datas = new ArrayList<T>();
        this.mInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

    public KLBaseRecyclerAdapter(Context context, List<T> datas) {
        super();
        this.mContext = context;
        this.datas.addAll(datas);
        this.mInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

    public void setOnClickListener(View.OnClickListener onClickListener) {
        this.onClickListener = onClickListener;
    }

    /**
     * 加载数据
     *
     * @param datas
     */
    public void setData(List<T> datas) {
        if (null != datas) {
//            if (this.datas.size() > 0) {
//                this.datas.clear();
//            }
            this.datas.addAll(datas);
            notifyDataSetChanged();
        }
    }

    public List<T> getData() {
        return this.datas;
    }

    public T getOneData(int potion) {
        return datas.get(potion);
    }

    /**
     * 上拉加载数据
     *
     * @param datas
     */
    public void addData(List<T> datas) {
        if (null != datas) {
            this.datas.addAll(datas);
            notifyDataSetChanged();
        }
    }

    /**
     * 清除数据源
     */
    public void clearData() {
        if (datas != null) {
            datas.clear();
            notifyDataSetChanged();
        }
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public int getItemCount() {
        return datas != null ? datas.size() : 0;
    }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = mInflater.inflate(setConvertView(), parent, false);
        return setViewHolder(view);
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
        onBindViewHolder((KLViewHolder)holder, position);
    }

    public abstract int setConvertView();

    public abstract RecyclerView.ViewHolder setViewHolder(View view);

    public abstract void onBindViewHolder(KLViewHolder holder, int position);

    abstract class KLViewHolder extends RecyclerView.ViewHolder {

        public KLViewHolder(View convertView) {
            super(convertView);

            initView(convertView);

            if (onClickListener != null)
                convertView.setOnClickListener(onClickListener);
        }

        abstract void initView(View convertView);
    }
}

实现:

package com.xxx.recyclerviewdemo.adapter;

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.TextView;

import com.zhuyongit.recyclerviewdemo.R;
import com.zhuyongit.recyclerviewdemo.bean.NewsBean;

import java.util.List;

/**
 * Created by WangQing on 15/11/17.
 */
public class TestAdapter extends KLBaseRecyclerAdapter<NewsBean> {

    public TestAdapter(Context context) {
        super(context);
    }

    public TestAdapter(Context context, List<NewsBean> datas) {
        super(context, datas);
    }

    @Override
    public int setConvertView() {
        return R.layout.grid_recycler_item_layout;
    }

    @Override
    public RecyclerView.ViewHolder setViewHolder(View view) {
        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(KLViewHolder holder, int position) {
        ViewHolder _viewHolder = (ViewHolder) holder;
        NewsBean  _newsBean = getData().get(position);
        _viewHolder.tvTitle.setText(_newsBean.getTitle());
        _viewHolder.tvContent.setText(_newsBean.getContent());
    }

    class ViewHolder extends KLViewHolder{

        private TextView tvTitle ;
        private TextView tvContent ;

        public ViewHolder(View convertView) {
            super(convertView);
        }

        @Override
        void initView(View convertView) {
            tvTitle = (TextView) convertView.findViewById(R.id.tvTitle);
            tvContent = (TextView) convertView.findViewById(R.id.tvContent);
        }
    }
}
gdky005 wechat
加微信好友,一起交流