1414 * limitations under the License.
1515 */
1616
17- @file:Suppress(" unused" , " MemberVisibilityCanBePrivate " )
17+ @file:Suppress(" unused" )
1818
1919package com.dylanc.loadinghelper
2020
2121import android.app.Activity
2222import android.view.LayoutInflater
2323import android.view.View
2424import android.view.ViewGroup
25+ import android.view.ViewGroup.LayoutParams.*
2526import android.widget.FrameLayout
2627import android.widget.LinearLayout
2728import androidx.constraintlayout.widget.ConstraintLayout
@@ -31,10 +32,7 @@ import java.util.*
3132/* *
3233 * @author Dylan Cai
3334 */
34- class LoadingHelper @JvmOverloads constructor(
35- private val contentView : View ,
36- contentAdapter : ContentAdapter <* >? = null
37- ) {
35+ class LoadingHelper (private val contentView : View ) {
3836 lateinit var decorView: View private set
3937 private lateinit var contentParent: ViewGroup
4038 private val parent: ViewGroup ?
@@ -55,19 +53,14 @@ class LoadingHelper @JvmOverloads constructor(
5553 /* *
5654 * Constructs a LoadingHelper with a activity and a content adapter
5755 *
58- * @param activity the activity
59- * @param contentAdapter the adapter of creating content view
56+ * @param activity the activity
6057 */
61- @JvmOverloads
62- constructor (activity: Activity , contentAdapter: ContentAdapter <* >? = null ) : this (
63- (activity.findViewById<View >(android.R .id.content) as ViewGroup ).getChildAt(0 ),
64- contentAdapter
65- )
58+ constructor (activity: Activity ) : this ((activity.findViewById<View >(android.R .id.content) as ViewGroup ).getChildAt(0 ))
6659
6760 init {
6861 adapterPool?.let { AdapterPool (this ).apply (it) }
6962 parent = contentView.parent as ViewGroup ?
70- register(ViewType .CONTENT , contentAdapter ? : SimpleContentAdapter ())
63+ register(ViewType .CONTENT , ContentAdapter ())
7164 setDecorAdapter(LinearDecorAdapter (listOf ()))
7265 }
7366
@@ -100,7 +93,7 @@ class LoadingHelper @JvmOverloads constructor(
10093 * Adds one or more views to decorate content in the header.
10194 *
10295 * @param adapters the adapters of creating view
103- * @since v2.2.1
96+ * @since v2.3.0
10497 */
10598 fun setDecorHeader (vararg adapters : Adapter <* >) {
10699 val viewType = Array <Any >(adapters.size) { adapters[it].javaClass.name }
@@ -143,7 +136,7 @@ class LoadingHelper @JvmOverloads constructor(
143136 * Adds child decorative header between the content and the decorative view.
144137 *
145138 * @param adapters the adapters of creating view
146- * @since v2.2.1
139+ * @since v2.3.0
147140 */
148141 fun addChildDecorHeader (vararg adapters : Adapter <* >) {
149142 val viewType = Array <Any >(adapters.size) { adapters[it].javaClass.name }
@@ -159,6 +152,7 @@ class LoadingHelper @JvmOverloads constructor(
159152 * @param viewTypes the view type of adapter
160153 * @since v2.1.0
161154 */
155+ @Suppress(" MemberVisibilityCanBePrivate" )
162156 fun addChildDecorHeader (vararg viewTypes : Any ) {
163157 val views = mutableListOf<View >()
164158 for (viewType in viewTypes) {
@@ -240,16 +234,21 @@ class LoadingHelper @JvmOverloads constructor(
240234 }
241235 if (parent is ConstraintLayout && viewType == ViewType .CONTENT ) {
242236 rootView.updateLayoutParams {
243- if (rootView.measuredWidth == 0 ) width = ViewGroup . LayoutParams . MATCH_PARENT
244- if (rootView.measuredHeight == 0 ) height = ViewGroup . LayoutParams . MATCH_PARENT
237+ if (rootView.measuredWidth == 0 ) width = MATCH_PARENT
238+ if (rootView.measuredHeight == 0 ) height = MATCH_PARENT
245239 }
246240 }
247241 contentParent.addView(rootView)
248242 currentViewHolder = viewHolder
249243 }
250244
251- private fun notifyDataSetChanged (adapter : Adapter <ViewHolder >) =
252- adapter.onBindViewHolder(getViewHolder(getViewType(adapter)!! ))
245+ private fun notifyDataSetChanged (adapter : Adapter <ViewHolder >) {
246+ for (entry in adapters.entries) {
247+ if (entry.value == adapter) {
248+ adapter.onBindViewHolder(getViewHolder(entry.key))
249+ }
250+ }
251+ }
253252
254253 private fun getViewHolder (viewType : Any ): ViewHolder {
255254 if (viewHolders[viewType] == null ) {
@@ -258,25 +257,12 @@ class LoadingHelper @JvmOverloads constructor(
258257 return viewHolders[viewType] as ViewHolder
259258 }
260259
261- private fun getViewType (targetAdapter : Adapter <* >): Any? {
262- for (entry in adapters.entries) {
263- if (entry.value == targetAdapter) {
264- return entry.key
265- }
266- }
267- return null
268- }
269-
270260 @Suppress(" UNCHECKED_CAST" )
271261 fun <T : Adapter <out ViewHolder >> getAdapter (viewType : Any ) = adapters[viewType] as T
272262
273263 private fun addViewHolder (viewType : Any ) {
274264 val adapter: Adapter <ViewHolder > = getAdapter(viewType)
275- val viewHolder = if (adapter is ContentAdapter <* >) {
276- adapter.onCreateViewHolder(contentView)
277- } else {
278- adapter.onCreateViewHolder(LayoutInflater .from(contentParent.context), contentParent)
279- }
265+ val viewHolder = adapter.onCreateViewHolder(LayoutInflater .from(contentParent.context), contentParent)
280266 viewHolder.viewType = viewType
281267 viewHolder.onReloadListener = onReloadListener
282268 viewHolders[viewType] = viewHolder
@@ -295,15 +281,8 @@ class LoadingHelper @JvmOverloads constructor(
295281 fun notifyDataSetChanged () = listener.invoke(this as Adapter <ViewHolder >)
296282 }
297283
298- abstract class ContentAdapter <VH : ViewHolder > : Adapter <VH >() {
299- override fun onCreateViewHolder (inflater : LayoutInflater , parent : ViewGroup ) =
300- onCreateViewHolder(View (parent.context))
301-
302- abstract fun onCreateViewHolder (contentView : View ): VH
303- }
304-
305- private class SimpleContentAdapter : LoadingHelper .ContentAdapter <ViewHolder >() {
306- override fun onCreateViewHolder (contentView : View ): ViewHolder = ViewHolder (contentView)
284+ private inner class ContentAdapter : LoadingHelper .Adapter <ViewHolder >() {
285+ override fun onCreateViewHolder (inflater : LayoutInflater , parent : ViewGroup ) = ViewHolder (contentView)
307286
308287 override fun onBindViewHolder (holder : ViewHolder ) = Unit
309288 }
@@ -327,9 +306,7 @@ class LoadingHelper @JvmOverloads constructor(
327306 LinearLayout (inflater.context).apply {
328307 orientation = LinearLayout .VERTICAL
329308 contentParent = FrameLayout (inflater.context)
330- contentParent.layoutParams = FrameLayout .LayoutParams (
331- ViewGroup .LayoutParams .MATCH_PARENT , ViewGroup .LayoutParams .MATCH_PARENT
332- )
309+ contentParent.layoutParams = FrameLayout .LayoutParams (MATCH_PARENT , MATCH_PARENT )
333310 views.forEach { addView(it) }
334311 addView(contentParent)
335312 }
0 commit comments