lizhanwei
2020-05-14 8735b56eefde751618c819f5b331a56a62274a5c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
package safeluck.drive.evaluation.adapter;
 
import android.util.SparseArray;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
 
import androidx.recyclerview.widget.RecyclerView;
 
import java.util.List;
 
public abstract class QuickAdapter<T> extends RecyclerView.Adapter<QuickAdapter.VH>{
    private List<T> mDatas;
    public QuickAdapter(List<T> datas){
        this.mDatas = datas;
    }
 
    public abstract int getLayoutId(int viewType);
 
    @Override
    public VH onCreateViewHolder(ViewGroup parent, int viewType) {
        return VH.get(parent,getLayoutId(viewType));
    }
 
    @Override
    public void onBindViewHolder(VH holder, int position) {
        convert(holder, mDatas.get(position), position);
    }
 
    @Override
    public int getItemCount() {
        return mDatas.size();
    }
 
    public abstract void convert(VH holder, T data, int position);
    //更新数据
    public void updateData(List<T> data) {
        this.mDatas = data;
        notifyDataSetChanged();
    }
 
    public static class VH extends RecyclerView.ViewHolder{
        private SparseArray<View> mViews;
        private View mConvertView;
 
        private VH(View v){
            super(v);
            mConvertView = v;
            mViews = new SparseArray<>();
        }
 
        public static VH get(ViewGroup parent, int layoutId){
            View convertView = LayoutInflater.from(parent.getContext()).inflate(layoutId, parent, false);
            return new VH(convertView);
        }
 
        public <T extends View> T getView(int id){
            View v = mViews.get(id);
            if(v == null){
                v = mConvertView.findViewById(id);
                mViews.put(id, v);
            }
            return (T)v;
        }
 
        public void setText(int id, String value){
            TextView view = getView(id);
            view.setText(value);
        }
    }
}