Skip to content

Commit d666943

Browse files
Remove content adapter
1 parent 8d99a99 commit d666943

File tree

1 file changed

+22
-45
lines changed

1 file changed

+22
-45
lines changed

library/src/main/java/com/dylanc/loadinghelper/LoadingHelper.kt

Lines changed: 22 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,15 @@
1414
* limitations under the License.
1515
*/
1616

17-
@file:Suppress("unused", "MemberVisibilityCanBePrivate")
17+
@file:Suppress("unused")
1818

1919
package com.dylanc.loadinghelper
2020

2121
import android.app.Activity
2222
import android.view.LayoutInflater
2323
import android.view.View
2424
import android.view.ViewGroup
25+
import android.view.ViewGroup.LayoutParams.*
2526
import android.widget.FrameLayout
2627
import android.widget.LinearLayout
2728
import 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

Comments
 (0)