-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathHKViewHolder.java
More file actions
93 lines (79 loc) · 3.19 KB
/
Copy pathHKViewHolder.java
File metadata and controls
93 lines (79 loc) · 3.19 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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
public class HKViewHolder extends RecyclerView.ViewHolder {
private SparseArray<View> views;
public enum Clickables {
ALL, NONE, ONLY_CHILDS, ONLY_ROOT
}
public interface HKViewHolderClickListener {
void onViewHolderClick(View view, int position, boolean isChildView);
}
private HKViewHolder(View view, HKViewHolderClickListener viewHolderClickListener, int[] childViewsToInflate, int[] clickableChilds, Clickables clickable) {
super(view);
views = new SparseArray<>();
views.put(0, view);
initViewList(childViewsToInflate);
createClickListeners(view, viewHolderClickListener, clickableChilds, clickable);
}
private void createClickListeners(View view, HKViewHolderClickListener viewHolderClickListener, int[] clickableChilds, Clickables clickable) {
switch (clickable) {
case ALL:
setClickListenerToViewHolder(view, viewHolderClickListener);
setClickListenerToChilds(clickableChilds, viewHolderClickListener);
break;
case ONLY_CHILDS:
setClickListenerToChilds(clickableChilds, viewHolderClickListener);
break;
case ONLY_ROOT:
setClickListenerToViewHolder(view, viewHolderClickListener);
break;
default:
break;
}
}
public static HKViewHolder constructWithParameters(View view, HKViewHolderClickListener viewHolderClickListener, int[] childViewsToInflate, int[] clickableChilds, Clickables clickables) {
return new HKViewHolder(view, viewHolderClickListener, childViewsToInflate, clickableChilds, clickables);
}
private void setClickListenerToViewHolder(View view, final HKViewHolderClickListener viewHolderClickListener) {
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
viewHolderClickListener.onViewHolderClick(v, getAdapterPosition(), false);
}
});
}
private void setClickListenerToChilds(@IdRes int[] childViewIds, final HKViewHolderClickListener viewHolderClickListener) {
if (childViewIds == null) return;
for (int id : childViewIds) {
View view = getView(id);
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
viewHolderClickListener.onViewHolderClick(v, getAdapterPosition(), true);
}
});
}
}
private void initViewList(int[] idList) {
if (idList == null) return;
for (int id : idList) {
initViewById(id);
}
}
private void initViewById(int id) {
View rootView = getRootView();
View childView = null;
if (rootView != null) {
childView = rootView.findViewById(id);
}
if (childView != null)
views.put(id, childView);
}
public View getRootView() {
return getView(0);
}
public View getView(int id) {
if (views.indexOfKey(id) >= 0) {
return views.get(id);
}
return null;
}
}