当前位置: 首页 > news >正文

Android View 初始化完成后,如果再调用measure再设置点击事件则点击事件会失效的解决方案

比如LinearLayout 或RecyclerView 我们在初始化完成并加载完数据后再次调用measure计算高度再setLayoutParams 会导致后面设置的点击事件失效。

比如:

        RecyclerView rv_select =dialog.findViewById(R.id.rv_select); //点击事件rv_select.setOnItemClickListener(new PopupAdapter.OnItemClickListener() {//....});// 重新测量一下rv_select的真实高度并限定最大值,注意!measure方法必须放在设置点击事件之后,否则点击事件会失效ViewGroup.LayoutParams params = rv_select.getLayoutParams();rv_select.measure(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);params.height = Math.min(rv_select.getMeasuredHeight(), Tools.dp2px(mContext,290));rv_select.setLayoutParams(params);
解决方法:

RecyclerView初始化完成后再调用measure方法可能会导致item点击事件失效的原因是,measure方法会重新测量并布局RecyclerView的子项视图,这可能会破坏已设置的点击监听器。

要解决这个问题,可以尝试以下两种解决方案之一:

  1. 在调用measure方法之前先设置点击监听器: 将设置点击监听器的代码放在RecyclerView初始化完成之后、调用measure方法之前执行。这样,在调用measure方法后,点击监听器仍然有效。

示例代码:

   // RecyclerView初始化RecyclerView recyclerView = findViewById(R.id.recyclerview);// 设置点击监听器recyclerView.setOnItemClickListener(new OnItemClickListener() {@Overridepublic void onItemClick(View view, int position) {// 处理点击事件}});// 调用measure方法recyclerView.measure(widthMeasureSpec, heightMeasureSpec);

2.避免在初始化完成后再次调用measure方法: 如果没有必要再次调用measure方法,请确保只在初始化阶段调用一次measure方法。如果需要进行布局更新,可以考虑使用其他方法,如requestLayout()或invalidate()。

http://www.lryc.cn/news/107192.html

相关文章:

  • 客户端电脑使用 FTP的Cadence_CIS库方法说明 (下)
  • 【ES】笔记-let 声明及其特性
  • wps 预加载项插件本地开发启动项目打开wps 客户端,未看到加载项菜单,
  • uni-app开发微信小程序经常遇到的一些问题及解决方案
  • 一个 git 仓库下拥有多个项目的 git hooks 配置方案
  • 钉钉对接打通金蝶云星空获取流程实例列表详情(宜搭)接口与其他应收单接口
  • 用python做一个小项目,python做简单小项目
  • 输入筛选框搜索
  • 公司植物日常护养方法备忘录
  • 小红书JAVA后端一面汇总总结
  • 【图论】强连通分量进阶
  • perl GetOptions
  • QGIS下载谷歌地图或者其他地图
  • Python-re模块-正则表达式模块常用方法
  • 修改el-select或者el-input样式失效
  • 【Apifox】Apifox设置参数说明:
  • 离线数仓中,为什么用两个flume,一个kafka
  • p7付费课程笔记6:CMS GC
  • Linux性能分析--cpuinfo的内核实现
  • 鲁大师7月新机性能/流畅/久用榜:骁龙8 Gen2领先版亮相,性能跑分再破新高
  • 【QT学习】01:helloqt
  • 学习gRPC (三)
  • 【html】学习记录
  • 2023年人工智能技术与智慧城市发展白皮书
  • 《Python入门到精通》条件控制 if 语句
  • 如何编写一个易于维护的考试系统源码
  • day 2 |977.有序数组的平方、209.长度最小的子数组、59.螺旋矩阵II
  • 【力扣每日一题】2023.8.2 翻转卡片游戏
  • IDEA设置中文 中文插件
  • Python——调用webdriver.Chrome() 报错