几周前,我开始学习Java以原生开发Android应用。
过去,我曾尝试使用Xamarin和C#进行移动跨平台开发,但过了一会儿,我决定放弃它,而仅使用Java直接制作Android应用。
我注意到Java和C#之间有很多共同点,但是有一件事情让我头疼:事件处理机制。
Java似乎不像C#那样本机管理事件(C#具有委托和事件,并且它们是特殊类型的委托),但是使用接口来实现目标。
现在,当我在Android中创建带有点击事件的按钮时,我会看到类似这样的内容:
Button btn = findViewById(R.id.button);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// some stuff here
}
});
如果我正确理解,btn.setOnClickListener()
是一种用于观察实现onClickListener
接口的对象的方法。在这种情况下,我们将创建一个新的View对象实例,该实例实现以下接口:new View.OnClickListener()
。
onClick(View view)
方法是在OnClickListener
接口中定义的方法,因此我们需要使用some stuff
尚不清楚(View view)
方法中的onClick()
参数的含义:当我通过它时?看来我可以实现onClick()
方法而不必通过它。它是什么意思?
可能我误解了Java事件的工作方式。我在网上进行了很多尝试,但未能找到关于事件机制如何在Java上工作的清晰明了的解释(不涉及gui Swing,AWT等元素)。
答案 0 :(得分:2)
setOnClickListener()
定义了单击视图(在您的情况下为 Button ,但适用于任何 View )时调用的回调。
View.OnClickListener
是仅具有一种方法onClick(View v)
的接口。您不必初始化或提供任何View对象,反之亦然。按下按钮后,将调用方法onClick(View v)
,而v
将成为被单击的实际按钮。
例如,单击按钮时可以获取按钮的文本。
Button btn = findViewById(R.id.button);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Button button = (Button) view;
Log.d("@@@@", "You clicked the " + button.getText() + " button");
}
});
答案 1 :(得分:0)
如果我从使用Android的那一刻起就没记错的话,(View view)
可以帮助'onClick'了解它需要UI才能使用。如果尝试不使用它,则会收到错误消息,或者如果尝试public void buttonClick(){//do something}
,则在XML中添加onClick = 'buttonClick'
。您还会收到一个错误。基本上拥有(View view)
只会帮助API了解用户界面的情况。