gpt4 book ai didi

java - 通过 XML 和 Java 代码使用 OnClickListener 接口(interface)有何不同?

转载 作者:IT老高 更新时间:2023-10-28 13:15:07 25 4
gpt4 key购买 nike

Possible Duplicate:
Difference between OnClick() event and OnClickListener?

我对 Android 开发是半新的,当我第一次开始时,我试图以任何必要的方式避免使用 xml 布局,因此我早期的一些项目涉及显式创建 OnClickListener 并将其实现为匿名内部类的按钮.比如-

final Button button = new Button(this);
button.setText("Click to change second line of text");

OnClickListener buttonListener = new View.OnClickListener() {
boolean clicked = false;
int numClicks = 0;

@Override
public void onClick(View v) {
if(numClicks > 5) {
button.setText("STOP IT");
}
numClicks++;
if(clicked == false){
clicked = true;
tv2.setText("Text Changed on Button Click");
}
else
{
clicked = false;
tv2.setText("Click again");
}
}
};
button.setOnClickListener(buttonListener);

但是随着我对android越来越熟悉,我开始明白xml布局的值(value),并像这样实现按钮

    <Button
android:id="@+id/button1"
android:layout_height = "wrap_content"
android:layout_width ="wrap_content"
android:text = "lets do this"
android:onClick = "DoIt"
/>

在布局xml中,DoIt是在java中定义的。

我的问题是,这两种方法在功能上是一样的吗?编译器是否在幕后某个地方定义了 OnClickListener?您是否通过一种方式或另一种方式权衡了任何功能?

最佳答案

这些完全一样。 android:onClick 是在 API 级别 4 中添加的,以使其更容易、更像 Javascript 网络,并从 XML 驱动一切。它在内部所做的是在 Button 上添加一个 OnClickListener,它会调用您的 DoIt 方法。

这是使用 android:onClick="DoIt" 在内部执行的操作:

Button button= (Button) findViewById(R.id.buttonId);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
DoIt(v);
}
});

与 XML 配置一样,使用 android:onClick 唯一的权衡是添加动态内容变得有点困难(以编程方式,您可以决定添加一个监听器或另一个取决于您的变量)。但这很容易通过在 DoIt 方法中添加测试来解决。

关于java - 通过 XML 和 Java 代码使用 OnClickListener 接口(interface)有何不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8977212/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com