1
1
package com.yogeshpaliyal.universalAdapter.adapter
2
2
3
3
import androidx.annotation.LayoutRes
4
+ import androidx.databinding.ViewDataBinding
4
5
import androidx.lifecycle.LifecycleOwner
5
6
import androidx.recyclerview.widget.ConcatAdapter
6
7
import androidx.recyclerview.widget.RecyclerView
@@ -80,37 +81,48 @@ class UniversalRecyclerAdapter<T> constructor(val adapterBuilder: Builder<T>) {
80
81
private var data: Resource <List <T >? > ? = null
81
82
82
83
init {
83
- if ( adapterBuilder.content != null )
84
+ adapterBuilder.content?. let { content ->
84
85
contentAdapter = ContentListAdapter (
85
86
adapterBuilder.lifecycleOwner,
86
- adapterBuilder. content
87
+ content
87
88
)
89
+ }
88
90
89
- if (adapterBuilder.loading?.resourceLoading != null )
90
- loadingAdapter = LoadingAdapter (
91
- adapterBuilder.lifecycleOwner,
92
- adapterBuilder.loading
93
- )
94
91
95
- if (adapterBuilder.loadingFooter?.loaderFooter != null )
96
- loadMoreAdapter = LoadingFooterAdapter (
97
- adapterBuilder.lifecycleOwner,
98
- adapterBuilder.loadingFooter
99
- )
92
+ adapterBuilder.loading?.let { loading ->
93
+ if (loading.resourceLoading != null )
94
+ loadingAdapter = LoadingAdapter (
95
+ adapterBuilder.lifecycleOwner,
96
+ loading
97
+ )
98
+ }
100
99
101
- if (adapterBuilder.error?.errorLayout != null )
100
+
101
+ adapterBuilder.loadingFooter?.let { loadingFooter ->
102
+ if (loadingFooter.loaderFooter != null )
103
+ loadMoreAdapter = LoadingFooterAdapter (
104
+ adapterBuilder.lifecycleOwner,
105
+ loadingFooter
106
+ )
107
+ }
108
+
109
+
110
+ adapterBuilder.error?.let { error ->
102
111
errorAdapter = ErrorAdapter (
103
112
adapterBuilder.lifecycleOwner,
104
- adapterBuilder. error,
113
+ error,
105
114
adapterBuilder.data?.message ? : " "
106
115
)
116
+ }
107
117
108
- if ( adapterBuilder.noData?.noDataLayout != null )
118
+ adapterBuilder.noData?.let { noData ->
109
119
noDataFound = NoDataAdapter (
110
120
adapterBuilder.lifecycleOwner,
111
- adapterBuilder. noData,
121
+ noData,
112
122
adapterBuilder.data?.message ? : " "
113
123
)
124
+ }
125
+
114
126
115
127
adapterBuilder.data?.let { updateData(data = it) }
116
128
}
@@ -120,8 +132,14 @@ class UniversalRecyclerAdapter<T> constructor(val adapterBuilder: Builder<T>) {
120
132
setupAdapters(data)
121
133
}
122
134
135
+ /* *
136
+ * Get Resource data
137
+ */
123
138
fun getData () = data
124
139
140
+ /* *
141
+ * get content adapter adapter which has content list adapter
142
+ */
125
143
fun getContentAdapter () = contentAdapter
126
144
fun getLoadMoreAdapter () = loadMoreAdapter
127
145
fun getLoadingAdapter () = loadingAdapter
@@ -224,16 +242,125 @@ class UniversalRecyclerAdapter<T> constructor(val adapterBuilder: Builder<T>) {
224
242
}
225
243
}
226
244
245
+
227
246
data class Builder <T > constructor(
228
- var lifecycleOwner : LifecycleOwner ? = null ,
229
- var data : Resource <List <T >? >? = null ,
230
- val content : UniversalAdapterViewType .Content <T >? = null ,
231
- val loading : UniversalAdapterViewType .Loading <T >? = null ,
232
- val loadingFooter : UniversalAdapterViewType .LoadingFooter <T >? = null ,
233
- val noData : UniversalAdapterViewType .NoData <T >? = null ,
234
- val error : UniversalAdapterViewType .Error <T >? = null
247
+ internal var lifecycleOwner : LifecycleOwner ? = null ,
248
+ internal var data : Resource <List <T >? >? = null ,
249
+ internal var content : UniversalAdapterViewType .Content <T >? = null ,
250
+ internal var loading : UniversalAdapterViewType .Loading <T >? = null ,
251
+ internal var loadingFooter : UniversalAdapterViewType .LoadingFooter <T >? = null ,
252
+ internal var noData : UniversalAdapterViewType .NoData <T >? = null ,
253
+ internal var error : UniversalAdapterViewType .Error <T >? = null
235
254
) {
236
255
256
+ fun setLifecycleOwner (lifecycleOwner : LifecycleOwner ? ) {
257
+ this .lifecycleOwner = lifecycleOwner
258
+ }
259
+
260
+ fun setData (data : Resource <List <T >? >? ) {
261
+ this .data = data
262
+ }
263
+
264
+ fun setContent (content : UniversalAdapterViewType .Content <T >) {
265
+ this .content = content
266
+ }
267
+
268
+ @JvmOverloads
269
+ fun setContent (
270
+ @LayoutRes
271
+ resource : Int? = null,
272
+ listener : Any? = null,
273
+ additionalParams : HashMap <Int , Any >? = null,
274
+ customBindingMapping : ((itemBinding: ViewDataBinding , item: T , bindingAdapterPosition: Int ) -> Unit )? = null
275
+ ) {
276
+ this .content = UniversalAdapterViewType .Content <T >(
277
+ resource,
278
+ listener,
279
+ additionalParams,
280
+ customBindingMapping
281
+ )
282
+ }
283
+
284
+ fun setLoading (loading : UniversalAdapterViewType .Loading <T >) {
285
+ this .loading = loading
286
+ }
287
+
288
+ @JvmOverloads
289
+ fun setLoading (
290
+ @LayoutRes
291
+ resourceLoading : Int? = null,
292
+ defaultLoadingItems : Int = 5,
293
+ additionalParams : HashMap <Int , Any >? = null,
294
+ customBindingMapping : ((itemBinding: ViewDataBinding , item: T ) -> Unit )? = null
295
+ ) {
296
+
297
+ this .loading = UniversalAdapterViewType .Loading <T >(
298
+ resourceLoading,
299
+ defaultLoadingItems,
300
+ additionalParams,
301
+ customBindingMapping
302
+ )
303
+ }
304
+
305
+ fun setLoadingFooter (loadingFooter : UniversalAdapterViewType .LoadingFooter <T >) {
306
+ this .loadingFooter = loadingFooter
307
+ }
308
+
309
+ @JvmOverloads
310
+ fun setLoadingFooter (
311
+ @LayoutRes
312
+ loaderFooter : Int? = null,
313
+ additionalParams : HashMap <Int , Any >? = null,
314
+ customBindingMapping : ((itemBinding: ViewDataBinding , item: T ) -> Unit )? = null
315
+ ) {
316
+ this .loadingFooter = UniversalAdapterViewType .LoadingFooter <T >(
317
+ loaderFooter,
318
+ additionalParams,
319
+ customBindingMapping
320
+ )
321
+ }
322
+
323
+ fun setNoData (noData : UniversalAdapterViewType .NoData <T >) {
324
+ this .noData = noData
325
+ }
326
+
327
+ @JvmOverloads
328
+ fun setNoData (
329
+ @LayoutRes
330
+ noDataLayout : Int? = null,
331
+ listener : Any? = null,
332
+ additionalParams : HashMap <Int , Any >? = null,
333
+ customBindingMapping : ((itemBinding: ViewDataBinding , item: String? ) -> Unit )? = null
334
+ ) {
335
+ this .noData = UniversalAdapterViewType .NoData <T >(
336
+ noDataLayout,
337
+ listener,
338
+ additionalParams,
339
+ customBindingMapping
340
+ )
341
+ }
342
+
343
+ fun setError (error : UniversalAdapterViewType .Error <T >) {
344
+ this .error = error
345
+ }
346
+
347
+ @JvmOverloads
348
+ fun setError (
349
+ @LayoutRes
350
+ errorLayout : Int? = null,
351
+ listener : Any? = null,
352
+ additionalParams : HashMap <Int , Any >? = null,
353
+ customBindingMapping : ((itemBinding: ViewDataBinding , message: String? ) -> Unit )? = null
354
+ ) {
355
+ this .error = UniversalAdapterViewType .Error <T >(
356
+ errorLayout,
357
+ listener,
358
+ additionalParams,
359
+ customBindingMapping
360
+ )
361
+ }
362
+
363
+
237
364
@Suppress
238
365
constructor (
239
366
@LayoutRes
0 commit comments