Android Kotlin中点击Include布局关闭按钮隐藏该布局的问题
解决Kotlin中点击Include布局内关闭按钮隐藏布局的问题
问题根源
你的代码存在两个关键错误:
- 重新
inflate了一个新的include_layout_view实例,这和界面上通过<include>标签加载的布局不是同一个对象,导致绑定的点击事件无法作用到实际显示的布局上。 - 错误地给
btn1按钮绑定了点击事件,而非目标关闭按钮close;同时点击后仅隐藏了按钮自身,没有隐藏整个include布局。
修正后的代码
直接通过ViewBinding获取界面上已加载的include布局及其内部控件,绑定正确的点击逻辑:
class MainActivity : AppCompatActivity() { private lateinit var binding: ActivityMainBinding override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = ActivityMainBinding.inflate(layoutInflater) setContentView(binding.root) // 点击打开按钮显示include布局 binding.openLayout.setOnClickListener { binding.inc.root.visibility = View.VISIBLE } // 获取include布局内的关闭按钮 val closeBtn = binding.inc.findViewById<ImageView>(R.id.close) // 绑定关闭逻辑:隐藏整个include布局 closeBtn.setOnClickListener { Toast.makeText(this, "已关闭布局", Toast.LENGTH_SHORT).show() binding.inc.root.visibility = View.GONE } } }
更简洁的ViewBinding写法
如果你的项目已开启ViewBinding,可直接通过include布局的绑定类访问内部控件,代码更直观:
class MainActivity : AppCompatActivity() { private lateinit var binding: ActivityMainBinding private lateinit var includeBinding: IncludeLayoutViewBinding override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = ActivityMainBinding.inflate(layoutInflater) setContentView(binding.root) // 获取include布局的绑定实例 includeBinding = IncludeLayoutViewBinding.bind(binding.inc.root) binding.openLayout.setOnClickListener { includeBinding.root.visibility = View.VISIBLE } includeBinding.close.setOnClickListener { Toast.makeText(this, "已关闭布局", Toast.LENGTH_SHORT).show() includeBinding.root.visibility = View.GONE } } }
内容的提问来源于stack exchange,提问作者coppersmith
相关产品推荐
相关产品推荐

