22
22
23
23
public class ExpandableLayout extends LinearLayout {
24
24
25
- public interface Renderer <T > {
26
- void render (View view , T model , boolean isExpanded , int position );
25
+ public interface Renderer <P , C > {
26
+ void renderParent (View view , P model , boolean isExpanded , int parentPosition );
27
+
28
+ void renderChild (View view , C model , int parentPosition , int childPosition );
27
29
}
28
30
29
31
private static final int NO_RES = 0 ;
@@ -38,9 +40,7 @@ public interface Renderer<T> {
38
40
@ LayoutRes
39
41
private int childLayout ;
40
42
41
- private Renderer parentRenderer ;
42
-
43
- private Renderer childRenderer ;
43
+ private Renderer renderer ;
44
44
45
45
private List <Section > sections ;
46
46
@@ -89,12 +89,8 @@ public <P> void setCollapseListener(ExpandCollapseListener.CollapseListener<P> c
89
89
this .collapseListener = collapseListener ;
90
90
}
91
91
92
- public void setParentRenderer (@ NonNull Renderer renderer ) {
93
- this .parentRenderer = renderer ;
94
- }
95
-
96
- public void setChildRenderer (@ NonNull Renderer renderer ) {
97
- this .childRenderer = renderer ;
92
+ public void setRenderer (@ NonNull Renderer renderer ) {
93
+ this .renderer = renderer ;
98
94
}
99
95
100
96
public void addSection (@ NonNull Section section ) {
@@ -129,31 +125,29 @@ public <P, C> void addChildren(P parent, List<C> children) {
129
125
}
130
126
131
127
private <C > void notifyItemAdded (int parentIndex , C child ) {
132
- if (childRenderer == null ) {
128
+ if (renderer == null ) {
133
129
return ;
134
130
}
135
131
ViewGroup parentView = (ViewGroup ) getChildAt (parentIndex );
136
132
View childView = layoutInflater .inflate (childLayout , null );
137
- childRenderer . render (childView , child , sections . get ( parentIndex ). expanded , sections .get (parentIndex ).children .size () - 1 );
133
+ renderer . renderChild (childView , child , parentIndex , sections .get (parentIndex ).children .size () - 1 );
138
134
parentView .addView (childView );
139
135
}
140
136
141
137
private <C > void notifyItemAdded (int parentIndex , List <C > children ) {
142
- if (childRenderer == null ) {
138
+ if (renderer == null ) {
143
139
return ;
144
140
}
145
141
ViewGroup parentView = (ViewGroup ) getChildAt (parentIndex );
146
- boolean isExpanded = sections .get (parentIndex ).expanded ;
147
142
for (int i = 0 ; i < children .size (); i ++) {
148
143
View childView = layoutInflater .inflate (childLayout , null );
149
- childRenderer . render (childView , children .get (i ), isExpanded , i );
144
+ renderer . renderChild (childView , children .get (i ), parentIndex , i );
150
145
parentView .addView (childView );
151
146
}
152
147
}
153
148
154
149
private void notifySectionAdded (final Section section ) {
155
-
156
- if (parentRenderer == null || childRenderer == null )
150
+ if (renderer == null )
157
151
return ;
158
152
159
153
LinearLayout sectionLayout = new LinearLayout (getContext ());
@@ -171,14 +165,14 @@ public void onClick(View view) {
171
165
}
172
166
}
173
167
});
174
- parentRenderer . render (parentView , section .parent , section .expanded , sections .size () - 1 );
168
+ renderer . renderParent (parentView , section .parent , section .expanded , sections .size () - 1 );
175
169
sectionLayout .addView (parentView );
176
170
177
171
if (section .expanded ) {
178
172
for (int i = 0 ; i < section .children .size (); i ++) {
179
173
Object child = section .children .get (i );
180
174
View childView = layoutInflater .inflate (childLayout , null );
181
- childRenderer . render (childView , child , section . expanded , i );
175
+ renderer . renderChild (childView , child , sections . size () - 1 , i );
182
176
sectionLayout .addView (childView );
183
177
}
184
178
}
0 commit comments