View is not a binding layout (com.chad.library.adapter)

645 阅读1分钟

原因: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;
}