gpt4 book ai didi

android - android :onClick XML attribute differ from setOnClickListener?到底是怎么回事

转载 作者:IT老高 更新时间:2023-10-28 12:49:25 30 4
gpt4 key购买 nike

据我所知,您可以通过两种方式将 onClick 处理程序分配给按钮。

使用 android:onClick XML 属性,您只需使用带有签名的公共(public)方法的名称void name(View v) 或使用 setOnClickListener 方法,您可以在其中传递一个实现 OnClickListener 接口(interface)的对象。后者通常需要一个我个人不喜欢的匿名类(个人喜好)或定义一个实现 OnClickListener 的内部类。

通过使用 XML 属性,您只需要定义一个方法而不是一个类,所以我是想知道是否可以通过代码而不是在 XML 布局中完成相同的操作。

最佳答案

不,这不可能通过代码实现。当您定义 android:onClick="someMethod" 属性时,Android 只会为您实现 OnClickListener

这两个代码 fragment 是相同的,只是以两种不同的方式实现。

代码实现

Button btn = (Button) findViewById(R.id.mybutton);

btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
myFancyMethod(v);
}
});

// some more code

public void myFancyMethod(View v) {
// does something very interesting
}

以上是 OnClickListener 的代码实现。这就是 XML 实现。

XML 实现

<?xml version="1.0" encoding="utf-8"?>
<!-- layout elements -->
<Button android:id="@+id/mybutton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Click me!"
android:onClick="myFancyMethod" />
<!-- even more layout elements -->

在后台,Android 只执行 Java 代码,在点击事件上调用您的方法。

请注意,使用上面的 XML,Android 将仅在当前 Activity 中查找 onClick 方法 myFancyMethod()。如果您正在使用 fragment ,请务必记住这一点,因为即使您使用 fragment 添加上面的 XML,Android 也不会在 .java 文件中查找 onClick 方法用于添加 XML 的 fragment 。

我注意到的另一件重要事情。您提到您不喜欢匿名方法。你的意思是说你不喜欢匿名classes

关于android - android :onClick XML attribute differ from setOnClickListener?到底是怎么回事,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4153517/

30 4 0