You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android自定义View内部ID与引用ID的区别及点击事件疑问

Android自定义View ID与点击事件问题解答

问题1:两个ID的区别及是否指向同一对象

这两个ID完全属于不同层级的标识,绝对不是同一个对象:

  • layout_custom_setting_entry_container 是你自定义View CustomSettingEntry 内部根布局(LinearLayout)的ID,它属于CustomSettingEntry的子View,作用范围仅限自定义View内部,用来在CustomSettingEntry的代码中定位这个LinearLayout实例。
  • layout_notification_setting 是你在Fragment布局中给CustomSettingEntry这个自定义View本身设置的ID,作用范围是Fragment的布局层级,用来在Fragment代码中找到整个CustomSettingEntry实例。

简单说,一个是自定义View内部子控件的标识,一个是自定义View作为整体在父布局中的标识,对应两个完全不同的View对象。

问题2:禁用内部LinearLayout的点击是否会终止Fragment中设置的监听器响应

不会,除非你直接禁用自定义View本身的点击状态。原因和Android的点击事件传递机制有关:

  • 你在Fragment中给CustomSettingEntry设置的点击监听器,是绑定在整个自定义View实例上的。
  • 内部的LinearLayout如果没有自己的点击监听器,默认不会消费点击事件——点击事件会从LinearLayout向上冒泡,最终传递到CustomSettingEntry,触发你设置的监听器。
  • 当你禁用内部LinearLayout的点击(比如调用setClickable(false)或setEnabled(false)),只是让这个LinearLayout本身不再响应点击,但它依然会把未消费的事件向上传递给父View(也就是CustomSettingEntry),所以你在Fragment中设置的监听器还是会正常响应。

如果想要终止这个监听器的响应,你需要直接给CustomSettingEntry实例调用setClickable(false)或者setEnabled(false),而不是去操作它内部的LinearLayout。

内容的提问来源于stack exchange,提问作者y.allam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:39:59