Skip to content

Commit

Permalink
fix: 可能出现的空指针异常
Browse files Browse the repository at this point in the history
  • Loading branch information
limuyang2 committed May 29, 2023
1 parent 87f9723 commit 87ccfbf
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 22 deletions.
2 changes: 1 addition & 1 deletion library/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ plugins {
signing
}

val versionName = "4.0.0-beta11"
val versionName = "4.0.0-beta12"


android {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,7 @@ abstract class BaseMultiItemAdapter<T>(items: List<T> = emptyList()) :
}

override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int, item: T?) {
val realViewType = getItemViewType(position, items)
typeViewHolders.get(realViewType)?.onBind(holder, position, item)
findListener(holder)?.onBind(holder, position, item)
}

override fun onBindViewHolder(
Expand All @@ -44,8 +43,7 @@ abstract class BaseMultiItemAdapter<T>(items: List<T> = emptyList()) :
return
}

val realViewType = getItemViewType(position, items)
typeViewHolders.get(realViewType)?.onBind(holder, position, item, payloads)
findListener(holder)?.onBind(holder, position, item, payloads)
}

/**
Expand Down Expand Up @@ -82,32 +80,31 @@ abstract class BaseMultiItemAdapter<T>(items: List<T> = emptyList()) :
override fun onViewAttachedToWindow(holder: RecyclerView.ViewHolder) {
super.onViewAttachedToWindow(holder)

(holder.itemView.getTag(R.id.BaseQuickAdapter_key_multi) as OnMultiItemAdapterListener<T, RecyclerView.ViewHolder>)
.onViewAttachedToWindow(holder)
findListener(holder)?.onViewAttachedToWindow(holder)
}

override fun onViewDetachedFromWindow(holder: RecyclerView.ViewHolder) {
super.onViewDetachedFromWindow(holder)
(holder.itemView.getTag(R.id.BaseQuickAdapter_key_multi) as OnMultiItemAdapterListener<T, RecyclerView.ViewHolder>)
.onViewDetachedFromWindow(holder)
findListener(holder)?.onViewDetachedFromWindow(holder)
}

override fun onViewRecycled(holder: RecyclerView.ViewHolder) {
super.onViewRecycled(holder)
(holder.itemView.getTag(R.id.BaseQuickAdapter_key_multi) as OnMultiItemAdapterListener<T, RecyclerView.ViewHolder>)
.onViewRecycled(holder)
findListener(holder)?.onViewRecycled(holder)
}

override fun onFailedToRecycleView(holder: RecyclerView.ViewHolder): Boolean {
return (holder.itemView.getTag(R.id.BaseQuickAdapter_key_multi) as OnMultiItemAdapterListener<T, RecyclerView.ViewHolder>)
.onFailedToRecycleView(holder)
return findListener(holder)?.onFailedToRecycleView(holder) ?: false
}

override fun isFullSpanItem(itemType: Int): Boolean {
return super.isFullSpanItem(itemType) ||
(typeViewHolders.get(itemType)?.isFullSpanItem(itemType) == true)
}

private fun findListener(holder: RecyclerView.ViewHolder) : OnMultiItemAdapterListener<T, RecyclerView.ViewHolder>? {
return holder.itemView.getTag(R.id.BaseQuickAdapter_key_multi) as? OnMultiItemAdapterListener<T, RecyclerView.ViewHolder>
}

interface OnMultiItemAdapterListener<T, V : RecyclerView.ViewHolder> {
fun onCreate(context: Context, parent: ViewGroup, viewType: Int): V
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ abstract class BaseQuickAdapter<T, VH : RecyclerView.ViewHolder>(
private var mOnItemLongClickListener: OnItemLongClickListener<T>? = null
private val mOnItemChildClickArray = SparseArray<OnItemChildClickListener<T>>(3)
private val mOnItemChildLongClickArray = SparseArray<OnItemChildLongClickListener<T>>(3)
private var onViewAttachStateChangeListeners: MutableList<OnViewAttachStateChangeListener>? =
private var mOnViewAttachStateChangeListeners: MutableList<OnViewAttachStateChangeListener>? =
null

private var _recyclerView: RecyclerView? = null
Expand Down Expand Up @@ -265,14 +265,14 @@ abstract class BaseQuickAdapter<T, VH : RecyclerView.ViewHolder>(
runAnimator(holder)
}

onViewAttachStateChangeListeners?.forEach {
mOnViewAttachStateChangeListeners?.forEach {
it.onViewAttachedToWindow(holder)
}
}

@CallSuper
override fun onViewDetachedFromWindow(holder: RecyclerView.ViewHolder) {
onViewAttachStateChangeListeners?.forEach {
mOnViewAttachStateChangeListeners?.forEach {
it.onViewDetachedFromWindow(holder)
}
}
Expand Down Expand Up @@ -673,21 +673,21 @@ abstract class BaseQuickAdapter<T, VH : RecyclerView.ViewHolder>(
}

fun addOnViewAttachStateChangeListener(listener: OnViewAttachStateChangeListener) {
if (onViewAttachStateChangeListeners == null) {
onViewAttachStateChangeListeners = ArrayList()
if (mOnViewAttachStateChangeListeners == null) {
mOnViewAttachStateChangeListeners = ArrayList()
}

if (onViewAttachStateChangeListeners?.contains(listener) == true) return
if (mOnViewAttachStateChangeListeners?.contains(listener) == true) return

onViewAttachStateChangeListeners?.add(listener)
mOnViewAttachStateChangeListeners?.add(listener)
}

fun removeOnViewAttachStateChangeListener(listener: OnViewAttachStateChangeListener) {
onViewAttachStateChangeListeners?.remove(listener)
mOnViewAttachStateChangeListeners?.remove(listener)
}

fun clearOnViewAttachStateChangeListener() {
onViewAttachStateChangeListeners?.clear()
mOnViewAttachStateChangeListeners?.clear()
}

/**
Expand Down

0 comments on commit 87ccfbf

Please sign in to comment.