Android:BaseRecyclerViewAdapter(RecyclerView 之 BaseAdapter)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/HMYANG314/article/details/50456279

RecyclerView已经出来了一段时间了,应该很多开发者也已经使用过,至于更多的关于RecyclerView的百度吧。

在使用RecyclerView时,它的adapter是RecyclerView.Adapter,在我开始使用中,每次都会写很多重复的东西,仔细看看,其实也是可以抽出一个BaseAdapter,这样开发更快捷,同时也提供短按和长按接口,代码如下:

BaseRecyclerViewAdapter.java

package com.hmy

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

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

/**
 * Created by HMY on 2015/12/25.
 */
public abstract class BaseRecyclerViewAdapter<T> extends RecyclerView.Adapter<BaseViewHolder> {

    protected Context mContext;
    protected List<T> mList;
    protected RecyclerView mRecyclerView;

    private OnItemClickListener mOnItemClickListener;
    private OnItemLongClickListener mOnItemLongClickListener;

    public BaseRecyclerViewAdapter(Context context) {
        mContext = context;
    }

    @Override
    abstract public BaseViewHolder onCreateViewHolder(ViewGroup viewGroup, int i);

    @Override
    public void onBindViewHolder(BaseViewHolder baseViewHolder, int i) {

        baseViewHolder.setOnItemClickListener(new BaseViewHolder.OnItemClickListener() {
            @Override
            public void onItemClick(View view, int position) {
                if (mOnItemClickListener != null) {
                    mOnItemClickListener.onItemClick(view, position);
                }
            }
        });
        baseViewHolder.setOnItemLongClickListener(new BaseViewHolder.OnItemLongClickListener() {
            @Override
            public void onItemLongClick(View view, int position) {
                if (mOnItemLongClickListener != null) {
                    mOnItemLongClickListener.onItemLongClick(view, position);
                }
            }
        });
    }

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

    public int getItemViewHeight() {
        return 0;
    }

    public void setList(List<T> list) {
        this.mList = list;
    }

    public List<T> getList() {
        return mList;
    }

    public void setList(T[] list) {
        ArrayList<T> arrayList = new ArrayList<T>(list.length);
        for (T t : list) {
            arrayList.add(t);
        }
        setList(arrayList);
    }

    public RecyclerView getRecyclerView() {
        return mRecyclerView;
    }

    public void setRecyclerView(RecyclerView recyclerView) {
        mRecyclerView = recyclerView;
    }

    public void setOnItemClickListener(OnItemClickListener l) {
        mOnItemClickListener = l;
    }

    public void setOnItemLongClickListener(OnItemLongClickListener l) {
        mOnItemLongClickListener = l;
    }

    public interface OnItemClickListener {
        void onItemClick(View view, int position);
    }

    public interface OnItemLongClickListener {
        void onItemLongClick(View view, int position);
    }

}


BaseViewHolder.java

由于RecyclerView规范了ViewHolder的使用,所以BaseViewHolder也是需要的。

package com.hmy;

import android.support.v7.widget.RecyclerView;
import android.view.View;

/**
 * Created by HMY on 2015/12/25.
 */
public class BaseViewHolder extends RecyclerView.ViewHolder {

    private OnItemClickListener mOnItemClickListener;
    private OnItemLongClickListener mOnItemLongClickListener;

    public BaseViewHolder(View itemView) {
        super(itemView);
        itemView.setOnClickListener(new OnClickLis());
        itemView.setOnLongClickListener(new OnLongClickLis());
    }

    private class OnClickLis implements View.OnClickListener {

        @Override
        public void onClick(View v) {
            if (mOnItemClickListener != null) {
                mOnItemClickListener.onItemClick(v, getPosition());
            }
        }
    }

    private class OnLongClickLis implements View.OnLongClickListener {

        @Override
        public boolean onLongClick(View v) {
            if (mOnItemLongClickListener != null) {
                mOnItemLongClickListener.onItemLongClick(v, getPosition());
                return true;
            }
            return false;
        }
    }

    public void setOnItemClickListener(OnItemClickListener l) {
        mOnItemClickListener = l;
    }

    public void setOnItemLongClickListener(OnItemLongClickListener l) {
        mOnItemLongClickListener = l;
    }

    public interface OnItemClickListener {
        void onItemClick(View view, int position);
    }

    public interface OnItemLongClickListener {
        void onItemLongClick(View view, int position);
    }
}

下面是一个TestAdapter

package com.hmy;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import com.hmy.R;
import com.hmy.TestModel;

/**
 * Created by HMY on 2015/12/25.
 */
public class RecyclerViewTestAdapter extends BaseRecyclerViewAdapter<TestModel> {

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

    @Override
    public BaseViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
        View v = LayoutInflater.from(mContext).inflate(R.layout.item_layout,
                viewGroup, false);

        TestViewHolder viewHolder = new TestViewHolder(v);
        return viewHolder;
    }

    @Override
    public void onBindViewHolder(BaseViewHolder baseViewHolder, int i) {
        super.onBindViewHolder(baseViewHolder, i);
        TestViewHolder holder = (TestViewHolder) baseViewHolder;//这里需要强转,与onCreateViewHolder中的ViewHolder一致

        holder.textTv.setText(mList.get(i).text);
    }

    private class TestViewHolder extends BaseViewHolder {

        public TextView textTv;

        public TestViewHolder(View itemView) {
            super(itemView);
            textTv = (TextView) itemView.findViewById(R.id.tv_text);
        }
    }
}


TestModel.java

package com.hmy;

import java.io.Serializable;

/**
 * Created by HMY on 2015/12/25.
 */
public class TestModel implements Serializable {

    public String text = "";
}






猜你喜欢

转载自blog.csdn.net/HMYANG314/article/details/50456279