我是编程的新手,我知道btn.setOnClickListener {}函数的工作原理(花括号)。 但是函数btn.setOnClickListener()还有其他提示-括号不是大括号。我不知道如何以及何时使用此功能。这种类型的函数如何调用?我想了解更多有关它的信息,但我不知道如何用谷歌搜索 答案:“如果一个函数只有一个参数,而这是一个函数,则可以删除括号”
答案 0 :(得分:0)
根据:https://antonioleiva.com/lambdas-kotlin-android/
如果一个函数只有一个参数,而这是一个函数,则可以删除括号
不用空括号,我们可以删除它们:
view.setOnClickListener { v -> toast("Hello") }
如果该函数的最后一个参数是一个函数,则可以超出括号
因此,我们可以按以下方式提取侦听器:
view.setOnClickListener() { v -> toast("Hello") }
如果我们有更多参数,则其余参数将放在括号内,即使它们是函数。只能提取最后一个参数。
答案 1 :(得分:0)
这两种类型是等效的:
button.setOnClickListener {
// ......................
}
button.setOnClickListener(View.OnClickListener {
// ......................
})
但第一种方法是首选方法。
即使您编写了第二本书,也可以将鼠标悬停在View.OnClickListener
上,
Android Studio 会弹出以下消息:
冗余SAM构造函数
,如果按Alt-Enter,将提示您:
删除冗余SAM构造函数
,如果您单击它,View.OnClickListener
将被删除。
再次按Alt-Enter,将提示您:
将lambda参数移出括号
,如果单击它,则将得到第一种。
所以不用担心,使用第一种类型,您会没事的。
答案 2 :(得分:0)
答案:“如果一个函数只有一个参数,而这是一个函数,则可以删除括号”
答案 3 :(得分:0)
setOnClickListener(接口i)
This is Method of View Class in Android.
1. setOnClickListener is method of that class which except only interface as a parameter.
2. or else you have to implement that interface in your class like given example.
Go through Anonymous Class implement process.
the thing is that. either you pass interface object or you have to implement onClick method interface OnClickListener.
1. When you want to implement in class use this
btnView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
2. Pass interface object of onClickListener
appView.setOnClickListener(); ;----> pass interface object