活动:能否请您告诉我我是否理解?

时间:2018-06-25 14:33:23

标签: java android event-handling

几周前,我开始学习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等元素)。

2 个答案:

答案 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了解用户界面的情况。