最近不是很忙写点东西,一来自己笔记,二来跟大家分享
我们在做项目的时候为了方便常常会引入一些开源的框架,但是本人觉得有些框架功能太多或者太过复杂,不利于自己项目维护或者杀鸡用牛刀。我本人还是比较热衷于使用系统原生的方式来实现,但也要适当的进行封装。下面讲我对RecyclerView的简单使用封装分享给大家。直接上代码吧!!
1、定义的adapter基类
package com.app.base.listview;
import android.support.annotation.LayoutRes;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v7.widget.RecyclerView;
import android.util.SparseArray;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Modifier;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;
/**
* Created by pwe on 2019/3/6.
*/
public abstract class BaseAdapter<T, K extends ViewHolder> extends RecyclerView.Adapter<K> {
private SparseArray<Integer> layoutResIds;
private List<T> mData;
public BaseAdapter(@Nullable List<T> data, @LayoutRes int layoutResId) {
this.mData = data == null ? new ArrayList<T>() : data;
if (layoutResId != 0) {
addLayoutResId(-1,layoutResId);
}
}
public BaseAdapter(@Nullable List<T> data) {
this(data,0);
}
protected void addLayoutResId(int viewType, @LayoutRes int layoutResId) {
if (layoutResIds == null) {
layoutResIds = new SparseArray<>();
}
layoutResIds.put(viewType, layoutResId);
}
@NonNull
@Override
public K onCreateViewHolder(@NonNull ViewGroup viewGroup, int viewType) {
int layoutResId = getLayoutResId(viewType);
if (layoutResId > 0){
return createBaseViewHolder(LayoutInflater.from(viewGroup.getContext()).inflate(layoutResId, viewGroup, false));
}
return null;
}
private int getLayoutResId(int viewType){
if (layoutResIds != null){
int layou