当前位置: 首页 > 面试题库 >

通过XML和Java代码使用OnClickListener界面有何不同?

廉学潞
2023-03-14
问题内容

我是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中,在Java中定义了DoIt。

我的问题是,这两种方法在功能上是否相同?编译器是否在幕后某个地方定义了OnClickListener?您是否使用一种方法或其他方法进行权衡?


问题答案:

这些是完全一样的。android:onClick在API级别4中添加了XML,以使其变得更简单,更类似于Java
Web,并从XML驱动一切。它在内部所做的是OnClickListener在Button上添加一个,它调用您的DoIt方法。

这是android:onClick="DoIt"内部使用a的功能:

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

android:onClick像往常一样,在XML配置中使用权衡的唯一问题是添加动态内容变得有点困难(通过编程,您可以根据变量决定添加一个侦听器或另一个侦听器)。但这很容易通过在DoIt方法中添加测试来克服。



 类似资料:
  • 问题内容: 我无法从代码中找到有关 启动 和 使用 Apache Felix的 信息。 我想做我可以 (或无法 做)的事情,可以用Apache Felix的Shell做。 例如,如何启动模块? 请帮忙。 问题答案: 因此,经过很多时间的尝试,这是 一个可能的解决方案 。 我们将有两个项目: OsgiModuleA ,其中包含要启动的模块 OsgiUsage ,它将使用“模块A” 文件模块/a/Ac

  • 本文向大家介绍vue 实现通过vuex 存储值 在不同界面使用,包括了vue 实现通过vuex 存储值 在不同界面使用的使用技巧和注意事项,需要的朋友参考一下 通过vuex 存储 1. 创建store.js文件 2. 保存fid这个值 3, 在其他页面获取fid 这个值 以上这篇vue 实现通过vuex 存储值 在不同界面使用就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持

  • 问题内容: 首先,我要说我是Java EE的新手,并且我在Java方面还没有扎实的理论背景。 我在掌握如何与Java 结合使用时遇到了麻烦。为了说明我发现的困难,我创建了一个非常简单的示例。 如果我有两个简单的接口和: 而一个实体,它实现还有一个它实现了: 我要如何在要保留上述两个实体之间的关系的方法中正确处理这种情况? 我要使用接口的主要原因是因为我想保持模块/层之间对公共接口的依赖性。我还要如

  • 问题内容: 我正在创建需要将服务连接到sql server的应用程序。添加依赖项后运行测试代码时,它成功运行。这是成功运行的测试代码: 但是,当我为jdbc添加依赖项并在创建服务时运行相同的代码时,它给了我类似以下的错误: 我在pom.xml中添加了此依赖项: 我应该进行哪些更改,以便在创建服务时成功建立连接? 问题答案: 您的依赖项的范围是,这意味着当应用程序正常运行(而不是作为测试)时,它将不

  • 本文向大家介绍java通过JFrame做一个登录系统的界面完整代码示例,包括了java通过JFrame做一个登录系统的界面完整代码示例的使用技巧和注意事项,需要的朋友参考一下 在java的JFrame内通过创建匿名对象的方式做登录界面 结果展示: 总结 以上就是本文关于java通过JFrame做一个登录系统的界面完整代码示例的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,

  • 问题内容: 基本上,我想做两件事: 我想知道是否可以使用Java代码运行Java代码。 如果可能的话,如何在屏幕上显示输出?(无论是常规输出还是错误或异常) 我知道这是可能的,因为我的一位前辈已经做到了,但是我不知道他是如何做到的。也许他使用了Java的内置类之一。 注意:用户将代码写入一些文本文件中,然后将文件内容存储在某个变量中,然后也许运行该代码。 问题答案: 是的,有可能。 步骤1:编译代