-
Notifications
You must be signed in to change notification settings - Fork 40
Expand file tree
/
Copy pathViewHolder.java
More file actions
76 lines (67 loc) · 2.06 KB
/
ViewHolder.java
File metadata and controls
76 lines (67 loc) · 2.06 KB
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
package com.sloop.adapter.utils;
import android.content.Context;
import android.util.SparseArray;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
/**
* Author: Sloop
* Version: v1.0
* Date: 2015/11/17
* <ul type="disc">
* <li><a href="http://www.sloop.icoc.cc" target="_blank">作者网站</a> </li>
* <li><a href="http://weibo.com/5459430586" target="_blank">作者微博</a> </li>
* <li><a href="https://github.com/GcsSloop" target="_blank">作者GitHub</a> </li>
* </ul>
*/
public class ViewHolder {
private SparseArray<View> mViews;
private View mConvertView;
private ViewHolder(Context context, ViewGroup parent, int layoutId, int position) {
this.mViews = new SparseArray<View>();
mConvertView = LayoutInflater.from(context).inflate(layoutId, parent, false);
mConvertView.setTag(this); //setTag
}
/**
* 获取ViewHolder的实例
*
* @param context 上下文
* @param convertView 布局
* @param parent 父布局
* @param layoutId 布局ID
* @param position 位置
* @return ViewHolder实例
*/
public static ViewHolder getInstance(Context context, View convertView, ViewGroup parent, int layoutId, int
position) {
if (convertView == null) {
return new ViewHolder(context, parent, layoutId, position);
} else {
return (ViewHolder) convertView.getTag();
}
}
/**
* 通过View的id来获取子View
*
* @param resId view的id
* @param <T> 泛型
* @return 子View
*/
public <T extends View> T getView(int resId) {
View view = mViews.get(resId);
//如果该View没有缓存过,则查找View并缓存
if (view == null) {
view = mConvertView.findViewById(resId);
mViews.put(resId, view);
}
return (T) view;
}
/**
* 获取布局View
*
* @return 布局View
*/
public View getConvertView() {
return mConvertView;
}
}