首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >通过XML和Java代码使用OnClickListener接口有什么不同?

通过XML和Java代码使用OnClickListener接口有什么不同?
EN

Stack Overflow用户
提问于 2012-01-24 03:10:26
回答 3查看 259.4K关注 0票数 71

可能重复:

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布局和实现按钮的价值,如下所示

    <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?有没有一些你用这种方式或其他方式来折衷的特性?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-01-24 03:17:49

这些是完全相同的。android:onClick是在API level 4中添加的,以使其更容易,更类似于Javascript web,并从XML驱动一切。它在内部做的是在按钮上添加一个调用您的DoIt方法的OnClickListener

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

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

使用android:onClick的唯一折衷是添加动态内容变得更加困难(在编程上,您可以根据您的变量决定添加一个或另一个侦听器)。但是,通过将测试添加到DoIt方法中,这很容易失败。

票数 174
EN

Stack Overflow用户

发布于 2012-01-24 03:21:00

使用XML,您需要自己设置onclick侦听器。首先使用类implements OnClickListener,然后添加变量Button button1;,然后将以下代码添加到onCreate()

button1 = (Button) findViewById(R.id.button1);
button1.setOnClickListener(this);

在实现OnClickListener时,您需要添加继承的方法onClick(),您将在其中处理单击

票数 4
EN

Stack Overflow用户

发布于 2012-01-24 03:20:03

即使您在XML中定义android:onClick = "DoIt“,您也需要确保您的活动(或视图上下文)具有定义了完全相同的名称和view as参数的公共方法。Android在activity中将您的定义与此实现绑定在一起。最后,实现将具有您在匿名内部类中编写的相同代码。因此,简单地说,在activity中没有内部类和侦听器附加,您将只有一个带有实现代码的公共方法。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8977212

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档