如何从 MaterialButton.addOnCheckedChangeListener { "as a lambda" } 获取监听器
How do I get the listener from the MaterialButton.addOnCheckedChangeListener { "as a lambda" }
我有一些 MaterialButton
可以更改选中状态(在切换组场景中)。
我的计划是通过MaterialButton
s addOnCheckedChangeListener
监听Checked状态
但是我需要在某些情况发生时删除监听器,我如何从 lambda 中获取监听器(对象)(并将其放入 onCheckedChangeListener
值中)?
var onCheckedChangeListener: MaterialButton.OnCheckedChangeListener?=null
...
myMaterialButton?.addOnCheckedChangeListener { button, isChecked ->
Log.i(TAG, "onViewCreated: button = $button, isChecked = $isChecked")
if(button.isChecked)
{
//Use some variables which are reachable here
//Do som work
}
else
{
//Use some variables which are reachable here
//Do some other work
}
}
...
//Some condition prior to this causes me to remove the listener by using
//removeOnCheckedChangeListener, but how do I get the onCheckedChangeListener from my
//lambda above which I need to remove ?
myMaterialButton?.removeOnCheckedChangeListener(onCheckedChangeListener)
解决方案当然很简单,但我找不到任何明显的答案。
如果您只使用这个单一的侦听器,调用 myMaterialButton?.clearOnCheckedChangeListeners()
会更简单,这样您就不必使用 属性.[=14= 来跟踪侦听器了]
但是,如果您需要删除多个侦听器之一:
您已经正确定义了 属性。要在将其传递给的方法之外创建侦听器对象,请在 lambda 前面加上接口名称。您可以直接将它分配给您的 属性,并且您可以使用 also
作用域函数将此侦听器也添加到您的按钮。
onCheckedChangeListener = MaterialButton.OnCheckedChangeListener { button, isChecked ->
Log.i(TAG, "onViewCreated: button = $button, isChecked = $isChecked")
if(button.isChecked)
{
//Use some variables which are reachable here
//Do som work
}
else
{
//Use some variables which are reachable here
//Do some other work
}
}.also { myMaterialButton?.addOnCheckedChangeListener(it) }
然后删除它:
onCheckedChangeListener?.let {
myMaterialButton?.removeOnCheckedChangeListener(it)
onCheckedChangeListener = null
}
我有一些 MaterialButton
可以更改选中状态(在切换组场景中)。
我的计划是通过MaterialButton
s addOnCheckedChangeListener
但是我需要在某些情况发生时删除监听器,我如何从 lambda 中获取监听器(对象)(并将其放入 onCheckedChangeListener
值中)?
var onCheckedChangeListener: MaterialButton.OnCheckedChangeListener?=null
...
myMaterialButton?.addOnCheckedChangeListener { button, isChecked ->
Log.i(TAG, "onViewCreated: button = $button, isChecked = $isChecked")
if(button.isChecked)
{
//Use some variables which are reachable here
//Do som work
}
else
{
//Use some variables which are reachable here
//Do some other work
}
}
...
//Some condition prior to this causes me to remove the listener by using
//removeOnCheckedChangeListener, but how do I get the onCheckedChangeListener from my
//lambda above which I need to remove ?
myMaterialButton?.removeOnCheckedChangeListener(onCheckedChangeListener)
解决方案当然很简单,但我找不到任何明显的答案。
如果您只使用这个单一的侦听器,调用 myMaterialButton?.clearOnCheckedChangeListeners()
会更简单,这样您就不必使用 属性.[=14= 来跟踪侦听器了]
但是,如果您需要删除多个侦听器之一:
您已经正确定义了 属性。要在将其传递给的方法之外创建侦听器对象,请在 lambda 前面加上接口名称。您可以直接将它分配给您的 属性,并且您可以使用 also
作用域函数将此侦听器也添加到您的按钮。
onCheckedChangeListener = MaterialButton.OnCheckedChangeListener { button, isChecked ->
Log.i(TAG, "onViewCreated: button = $button, isChecked = $isChecked")
if(button.isChecked)
{
//Use some variables which are reachable here
//Do som work
}
else
{
//Use some variables which are reachable here
//Do some other work
}
}.also { myMaterialButton?.addOnCheckedChangeListener(it) }
然后删除它:
onCheckedChangeListener?.let {
myMaterialButton?.removeOnCheckedChangeListener(it)
onCheckedChangeListener = null
}