BaseAdapter的简单封装

来源:互联网 发布:淘宝店铺装修平台 编辑:程序博客网 时间:2024/06/10 07:13
继承BaseAdapter的抽象类(根据需求进行添加方法)
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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
public abstract class MyBaseAdapter<T> extends BaseAdapter{
 
    public List<T> list;
    public Context context;
 
    public MyBaseAdapter(Context context,List<T> list) {
        this.list = list;
        this.context = context;
    }
 
    @Override
    public int getCount() {
        return list != null ? list.size() : 0;
    }
 
    @Override
    public Object getItem(int position) {
        return list.get(position);
    }
 
    @Override
    public long getItemId(int position) {
        return position;
    }
 
    /**
     *入口,第一步
     */
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        //实现抽象方法创建ViewHolder,并返回ViewHolder执行getItemView方法返回的视图
        return createViewHoler(position, convertView, parent).getItemView();
    }
 
    /**
     * 创建ViewHolder的抽象方法
     * @param position
     * @param convertView
     * @param parent
     * @return
     */
    public abstract ViewHolder createViewHoler(int position, View convertView, ViewGroup parent);
 
    /**
     * ViewHolder类
     */
    public static class ViewHolder {
        private View convertView;
        //保存View的map
        private HashMap<Integer, View> views;
        private Context context;
 
        /**
         *第四步:ViewHolder的私有构造器
         */
        private ViewHolder(Context context, View convertView) {
            this.convertView = convertView;
            this.views = new HashMap<>();
            this.context = context;
            //设置tag
            convertView.setTag(this);
        }
 
        /**
         *第三步:提供给外界获取ViewHolder的方法(使用优化重用布局)
         */
        public static ViewHolder getHolder(View convertView, Context context, int layoutId, ViewGroup parent) {
            if (convertView == null) {
                LayoutInflater inflater = LayoutInflater.from(context);
                convertView = inflater.inflate(layoutId, parent, false);
                return new ViewHolder(context, convertView);
            else {
                return (ViewHolder) convertView.getTag();
            }
        }
 
        /**
         * findById方法
         * @param id
         * @param <T>
         * @return
         */
        public <T extends View> T findById(int id) {
            View view = views.get(id);
            if (view == null) {
                view = convertView.findViewById(id);
                views.put(id, view);
 
            else {
                view = views.get(id);
            }
            return (T) view;
        }
 
        /**
         * 设置TextView文本方法
         * @param id
         * @param txt
         */
        public void setText(int id, String txt) {
            TextView tv = findById(id);
            tv.setText(txt);
        }
 
        /**
         * 返回整个视图
         * @return
         */
        public View getItemView() {
            return convertView;
        }
    }
}
继承封装的适配器代码
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
public class TestAdapter extends MyBaseAdapter{
 
    private List<String> list;
    protected Context context;
 
    public TestAdapter(Context context, List<String> list) {
        super(context, list);
        this.list = list;
        this.context = context;
    }
 
    /**
     * 第二步
     * @param position
     * @param convertView
     * @param parent
     * @return
     */
    @Override
    public ViewHolder createViewHoler(int position, View convertView, ViewGroup parent) {
        ViewHolder holder = ViewHolder.getHolder(convertView,context, R.layout.simple_fragment,parent);
        //findById方法
        TextView tv = holder.findById(R.id.tv_sp_fm);
        //设置TextView文本方法
        holder.setText(R.id.tv_sp_fm,list.get(position));
        return holder;
    }
}

0 0
原创粉丝点击