原因:Header Footer EmptyLayout 都不是layout 布局包裹 绑定时会有Argument异常报错
private lateinit var mHeaderLayout: LinearLayout
private lateinit var mFooterLayout: LinearLayout
private lateinit var mEmptyLayout: FrameLayout
fun setEmptyView(emptyView: View) {
val oldItemCount = itemCount
var insert = false
if (!this::mEmptyLayout.isInitialized) {
mEmptyLayout = FrameLayout(emptyView.context)
mEmptyLayout.layoutParams = emptyView.layoutParams?.let {
return@let ViewGroup.LayoutParams(it.width, it.height)
} ?: ViewGroup.LayoutParams(MATCH_PARENT, MATCH_PARENT)
insert = true
} else {
emptyView.layoutParams?.let {
val lp = mEmptyLayout.layoutParams
lp.width = it.width
lp.height = it.height
mEmptyLayout.layoutParams = lp
}
}
mEmptyLayout.removeAllViews()
mEmptyLayout.addView(emptyView)
isUseEmpty = true
if (insert && hasEmptyView()) {
var position = 0
if (headerWithEmptyEnable && hasHeaderLayout()) {
position++
}
if (itemCount > oldItemCount) {
notifyItemInserted(position)
} else {
notifyDataSetChanged()
}
}
}
解决:继承 BaseViewHolder 写自己的BaseDataBingViewHolder
protected BD viewBing;
public YkBaseDataBingViewHolder(@NonNull View view) {
super(view);
if (view.getTag() instanceof String){ // 判断是否是ViewDataBinding
viewBing= DataBindingUtil.bind(view);
}
}
public BD getViewBing() {
return viewBing;
}