当我在按钮上指定onClick
函数时,我有一个疑问,为什么将View用作参数?
和
当我们不指定该视图时会发生什么
示例:
public void ara(View button){
}
此处onClick
的按钮功能:ara
谢谢
答案 0 :(得分:3)
我相信View是一个参数,因为这是您说出哪个视图启动了回调的方式。
单击视图时要调用的回调的接口定义。 ViewOnClickListener
您将其设置如下:
final Button button = findViewById(R.id.button_id);
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// View v is the button in this case.
// Here you add what to do when this callback is initiated.
}
});
}
在这段代码中,请注意:
final Button button = findViewById(R.id.button_id);
记录find View ById button.setOnClickListener
(来自View.setOnClickListener
)的原因。您基本上是在说Button是现在正在谈论的视图,View.OnClickListener
应该听这个视图必须说的话。 onClick(View v)
中出现 View v 的最后一点。正在说的视图将是View v
。为什么这有用?这样,您可以多次引用同一个侦听器(回调)。在这种情况下,当我们执行new View.OnClickListener()
时,我们会即时进行回调。但是,如果我们不这样做怎么办?如果多个按钮引用了同一侦听器怎么办?此时View v
变得很重要。因此,我们可以执行类似v.getId()
的操作,以便知道正在说哪个视图(启动了回调)。此函数将返回调用该视图的R.id
的ID。在这种情况下,我们用R.id.button_id
声明了一个按钮,因此我们才知道该按钮调用了它。答案 1 :(得分:1)
View
在onClick()
方法中被用作参数,因为它是附加了OnClickListener
的视图。
这在多种方式中非常有用,例如,如果视图是TextView
,并且您想在单击视图时更新其文本。
其他常见用途可能是:
设置视图可见性
在单击时将视图传递到ObjectAnimator
进行动画制作
通过Context
来获取view.getContext()
总体而言,它只是您必须对OnClickListener
所属的视图执行修改,或者您可以将View
用于其他目的或计算的必要参数。
此外,如果您未在onClick()
方法中包含View,则您的代码将无法编译。这是因为OnClickListener
是一个接口,并且默认情况下,接口内部的方法没有方法主体。
相反,由您自己来覆盖方法并为其指定适当的方法主体。但是,由于要覆盖该方法,因此这也意味着必须包含相同的方法名称,相同的方法修饰符和相同的方法参数,以正确反映要覆盖的方法。
不这样做将意味着所需的接口方法没有被覆盖,因此您的代码将无法编译。
答案 2 :(得分:0)
因为相同的方法可以用于多个视图,所以您需要知道哪个事件正在引发事件。
public void ara(View button) {
switch (button.getId() {
...
}
}
答案 3 :(得分:0)
您可以在文档中看到:Responding to Click Events.
flatMap
您在android: onClick 属性中声明的方法必须具有完全如上所述的签名。具体来说,该方法必须:
公开
返回空白
将视图定义为其唯一参数(这将是被单击的视图)。