【问题标题】:Events: Could you, please, tell me if I understood?事件:请告诉我我是否理解?
【发布时间】:2018-06-25 14:33:22
【问题描述】:

几周前我开始学习 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 来实现它

onClick()方法中(View view)参数的含义不清楚:什么时候通过?看来我可以实现onClick() 方法而无需传递它。它的意义是什么? 可能我误解了 Java 事件的工作方式。我在网上尝试了很多,但我无法找到关于事件机制如何在 Java 上工作的清晰明了的解释(不涉及 gui Swing、AWT 等元素)。

【问题讨论】:

标签: java android event-handling


【解决方案1】:

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");
   }
});

【讨论】:

    【解决方案2】:

    如果我在使用 Android 时没记错的话,(View view) 可以帮助“onClick”理解它需要 UI 中的某些东西才能使用。如果您尝试不使用它,则会收到错误消息,或者如果您尝试使用public void buttonClick(){//do something},则在 XML 中添加 onClick = 'buttonClick'。你也会得到一个错误。基本上,(View view) 只是帮助 API 了解 UI 发生了什么。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-08
      • 1970-01-01
      • 1970-01-01
      • 2016-11-09
      • 2012-07-24
      • 2016-04-03
      • 1970-01-01
      • 2021-09-11
      相关资源
      最近更新 更多