Android:BaseQuickAdapter中的单个View点击无效

1,177 阅读1分钟

1、前言:

在软件开发过程中,突然复制按钮,有时候点击没有作用,连日志都不打印,我反复点了好多次,然后滑动列表,过一会可以点击了,然后所有的复制按钮又可以点击了,第一次刚进入的时候无效,过一会又可以了。

36fc6234307fc5f5a67a67c3853135d.png

2、解决思路:

  • 1、我在adapter中写点击事件,刚进来不能点击,过一会能点击;
  • 2、我在Fragment中,子View的ID,刚进来不能点击,过一会能点击;
  • 3、我重写了Adapter的列表,刚进来不能点击,过一会能点击;
  • 4、接着,我把所有的子View删除,只留一个View,发现可以点击;
  • 5、最后,我通过二分法查找到是Glide图片加载影响了点击事件;

原因:列表的图片加载,占用主线程,造成阻塞,这是为什么刚进来点击无效,过一会可以点击了。在有图片加载的列表,在图片url为空的情况下,不要使用Glide去加载图片了

3、修改的代码

注意:列表中的图片加载,一定要判断图片地址是否为空,不为空再去加载,否则列表的都去加载图片,会阻塞主线程的操作。


//必须这样写
var url = item.storePic ?: ""
if (TextUtils.isEmpty(url)) {
    ivPic.setImageResource(R.mipmap.main_loading_pic)
} else {
    GlideUtils.loadRoundedRectangleUrl(
        context, url, ivPic, 8
    )
}
//全部代码
class WarehouseAcceptanceAdapter :
    BaseQuickAdapter<AcceptListBean, BaseDataBindingHolder<ItemWarehouseAcceptanceAdapterBinding>>(R.layout.item_warehouse_acceptance_adapter) {
    override fun convert(
        holder: BaseDataBindingHolder<ItemWarehouseAcceptanceAdapterBinding>,
        item: AcceptListBean
    ) {
        var position = holder.adapterPosition + 1
        holder.dataBinding?.apply {
            //提货回仓-拒收回仓-揽件入仓
            tvNumber.text = "${position}${item.acceptTaskTypeDesc}"
            // 验收标记(0:未验收,1:已验收)
            if (item.acceptState == 1) {
                //已验收
                tvOrderStatus.setTextColor(ContextCompat.getColor(context, R.color.color_349904))
            } else {
                //未验收
                tvOrderStatus.setTextColor(ContextCompat.getColor(context, R.color.red))
            }

            tvOrderStatus.text = "${item.acceptStateDesc}"

            //验收类型
            when (item.acceptTaskType) {
                1 -> {
                    //揽件入仓
                    tvNumber.setBackgroundResource(R.drawable.x_shap_right_20_349904)
                }
                2 -> {
                    //拒收回仓
                    tvNumber.setBackgroundResource(R.drawable.x_shap_right_20_34711d)
                }

                3 -> {
                    //提货回仓
                    tvNumber.setBackgroundResource(R.drawable.x_shap_right_20_3699ff)
                }

                4 -> {
                    //改日送
                    tvNumber.setBackgroundResource(R.drawable.x_shap_right_20_4b409e)
                }
            }
            //包裹号
            tvOrderNumber.text = item.caseCode ?: ""
            tvBusinessOrderNumber.text = item.custOrderNo ?: ""
            tvDriverNumber.text = item.driverName ?: ""
            tvDriverStatus.text = item.driverMobile ?: ""
            tvUserName.text = item.contact ?: ""
            tvCarStatus.text = item.addressTypeDesc ?: ""
            tvShopName.text = item.shopName ?: ""
            tvAddress.text = item.address ?: ""
            tvWarehouseTitle.text = item.fromNodeName ?: ""
            tvWarehouseNumber.text = "--送货----▶ ${item.toNodeName ?: ""}"

            //必须这样写
            var url = item.storePic ?: ""
            if (TextUtils.isEmpty(url)) {
                ivPic.setImageResource(R.mipmap.main_loading_pic)
            } else {
                GlideUtils.loadRoundedRectangleUrl(
                    context, url, ivPic, 8
                )
            }

            /**
             * 点击事件
             */
            tvOrderNumber.setOnClickListener {
                //复制
                //LogUtils.debugInfo("---开始复制---${item.caseCode}")
                CommonUtils.copyOrderNumber(context,"${item.caseCode}")
            }

        }


    }