通过 XML 和 Java 代码使用 OnClickListener 接口有何不同? [复制]

2024-04-02

可能的重复:
OnClick() 事件和 OnClickListener 之间的区别? https://stackoverflow.com/questions/7453299/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.io.xml 中定义的。

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


这些是完全相同的。android:onClick在 API 级别 4 中添加,使其更容易、更像 Javascript Web,并通过 XML 驱动一切。它的内部作用是添加一个OnClickListener在按钮上,它会调用您的DoIt method.

这是使用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与 XML 配置一样,添加动态内容变得有点困难(通过编程,您可以根据变量决定添加一个或另一个侦听器)。但这很容易通过在DoIt method.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过 XML 和 Java 代码使用 OnClickListener 接口有何不同? [复制] 的相关文章

  • ConcurrentHashMap 内部是如何工作的?

    我正在阅读有关 Java 并发性的 Oracle 官方文档 我想知道Collection由返回 public static
  • 需要使用 joda 进行灵活的日期时间转换

    我想使用 joda 解析电子邮件中的日期时间字符串 不幸的是我得到了各种不同的格式 例如 Wed 19 Jan 2011 12 52 31 0600 Wed 19 Jan 2011 10 15 34 0800 PST Wed 19 Jan
  • Jackson XML ArrayList 输出具有两个包装器元素

    我在 Jackson 生成的 XML 输出中得到了两个包装器元素 我只想拥有一个 我有一个 Java bean Entity Table name CITIES JacksonXmlRootElement localName City pu
  • jar 中的 apklib 有什么优点?

    我正在关注这个问题 https stackoverflow com questions 6059502 whats the difference between apklib and jar files但它并没有完全回答我的问题 jar 中
  • 从手机访问本地主机[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我正在使用
  • 套接字的读写如何同步?

    我们创建一个套接字 在套接字的一侧有一个 服务器 在另一侧有一个 客户端 服务器和客户端都可以向套接字写入和读取 这是我的理解 我不明白以下事情 如果服务器从套接字读取数据 它在套接字中是否只看到客户端写入套接字的内容 我的意思是 如果服务
  • 生成的序列以 1 开头,而不是注释中设置的 1000

    我想请求一些有关 Hibernate 创建的数据库序列的帮助 我有这个注释 下面的代码 在我的实体类中 以便为合作伙伴表提供单独的序列 我希望序列以 1000 开头 因为我在部署期间使用 import sql 将测试数据插入数据库 并且我希
  • 从 GitHub 上托管的 Spring Cloud Config Server 访问存储库的身份验证问题

    我在 GitHub 上的存储库中托管配置 如果我将回购公开 一切都好 但如果我将其设为私有 我将面临 org eclipse jgit errors TransportException https github com my user m
  • Freemarker 和 Struts 2,有时它计算为序列+扩展哈希

    首先我要说的是 使用 Struts2 Freemarker 真是太棒了 然而有些事情让我发疯 因为我不明白为什么会发生这种情况 我在这里问是因为也许其他人有一个想法可以分享 我有一个动作 有一个属性 说 private String myT
  • 在 SWT/JFace RCP 应用程序中填充巨大的表

    您将如何在 SWT 表中显示大量行 巨大是指超过 20K 行 20 列的东西 不要问我为什么需要展示那么多数据 这不是重点 关键是如何让它尽可能快地工作 这样最终用户就不会厌倦等待 每行显示某个对象的实例 列是其属性 一些 我想使用 JFa
  • 如何在 Java 中创建接受多个值的单个注释

    我有一个名为 Retention RetentionPolicy SOURCE Target ElementType METHOD public interface JIRA The Key Bug number JIRA referenc
  • 返回 Java 8 中的通用函数接口

    我想写一种函数工厂 它应该是一个函数 以不同的策略作为参数调用一次 它应该返回一个函数 该函数根据参数选择其中一种策略 该参数将由谓词实现 嗯 最好看看condition3为了更好的理解 问题是 它没有编译 我认为因为编译器无法弄清楚函数式
  • 更改Android菜单的背景颜色[重复]

    这个问题在这里已经有答案了 我正在尝试将标准浅灰色更改为浅绿色 似乎没有一个简单的方法可以做到这一点 例如 通过 Android 主题 但我找到了一个解决方法 如本页所述 http tinyurl com 342dgn3 http tiny
  • Hamcrest Matchers - 断言列表类型

    问题 我目前正在尝试使用 Hamcrest Matchers 来断言返回的列表类型是特定类型 例如 假设我的服务调用返回以下列表 List
  • 使用按钮作为列表的渲染器

    我想使用一个更复杂的渲染器 其中包含列表的多个组件 更准确地说 类似于this https stackoverflow com questions 10840498 java swing 1 6 textinput like firefox
  • Android 中的 Google Places API - 适用于个人用户的 API_KEY

    我已经浏览了与在 Android 应用程序中使用 Places API 相关的 Android 文档和其他博客 到处都建议使用 API KEY 来调用 REST 服务 API KEY 在整个项目 应用程序中都是相同的 每天的请求数限制为 1
  • 如何重新启动死线程? [复制]

    这个问题在这里已经有答案了 有哪些不同的可能性可以带来死线程回到可运行状态 如果您查看线程生命周期图像 就会发现一旦线程终止 您就无法返回到新位置 So 没有办法将死线程恢复到可运行状态 相反 您应该创建一个新的 Thread 实例
  • 如何以编程方式创建活动转换?

    我想以编程方式创建一个动画 以从触摸屏点启动具有缩放效果的活动 接下来我模拟缩放输入效果
  • putFragment() - 片段 x 当前不在 FragmentManager 中

    上面的标题被问了很多次 但答案似乎与FragmentStatePagerAdapter这与我的问题无关 我正在使用该方法putFragment Bundle String Fragment 直接地 The 安卓文档 http develop
  • 在java中使用多个bufferedImage

    我正在 java 小程序中制作游戏 并且正在尝试优化我的代码以减少闪烁 我已经实现了双缓冲 因此我尝试使用另一个 BufferedImage 来存储不改变的游戏背景元素的图片 这是我的代码的相关部分 public class QuizApp

随机推荐

  • 在 Thread 中使用 asyncio 的问题

    如下使用asyncio没有问题 import asyncio async def main await asyncio sleep 1 aaa 1 print aaa loop asyncio get event loop loop run
  • 如何更改toolstripmenuitem边框颜色?

    我制作了这样的表单 语言 c VisualStudio2012 https i stack imgur com 5GEY1 jpg https i stack imgur com 5GEY1 jpg如何将toolstripmenuitem
  • Typo3:如何上传文件并创建文件引用?

    我将尝试在 FE 中上传一个文件 或稍后的多个文件 这有效 就像我当前的代码一样 但是我现在如何获取该文件的文件引用呢 var array fileData var integer feUserId return TYPO3 CMS Ext
  • 降低滑动视图灵敏度 .Net Maui

    我不想死old post https stackoverflow com questions 62732570 reduce sensitivity in swipeview所以我正在为此创建一个新的 我有一个集合视图 两侧都有两个按钮来增
  • OpenCV putText() 换行符

    我正在使用 cv2 putText 在图像上绘制文本字符串 当我写的时候 cv2 putText img This is n some text 50 50 cv2 FONT HERSHEY SIMPLEX 1 2 图像上绘制的文字是 Th
  • Maven jaxb2:xjc 无法生成代码

    我已将以下插件添加到 pom xml 中的 Maven 构建中
  • 与非加密连接相比,TLS 会增加多少网络开销?

    与未加密连接相比 在加密连接期间必须通过网络传输 大约 多少位数据 IIUC 一旦 TLS 握手完成 传输的位数等于未加密连接期间传输的位数 这准确吗 接下来 考虑到快速处理器和相同 理想 的网络条件 通过 https 传输大文件是否比通过
  • DDD建模,聚合根之间的交互

    Marked my aggregate roots with 1 2 3 Looks quite nice almost like grapes 我不喜欢的是一个标有红色箭头的实体 让我们想象一下 AR 1 是公司 AR 2 是办公室 AR
  • 如何保持 WCF 网站在线?

    我在 IIS 7 上有一个 WCF 站点 该站点很少被访问 这会导致应用程序卸载 如何才能让应用程序 WCF 始终保持运行状态 没有理由停止使用 IIS 您所需要做的就是设置应用程序池选项 以便服务永远不会因不活动而关闭 不幸的是 默认值是
  • 是否可以从 Jenkins 脚本控制台发送电子邮件?

    为了在新的 Jenkins 实例中自动进行用户注册 我生成了一个Groovy脚本 Automatically generated groovy script 1463047124 jenkins model Jenkins instance
  • 为什么运行 Update-Database 时出现“对象引用未设置到对象实例”的情况

    第一次使用实体框架 我一直在测试内存数据库 该数据库运行良好 但想开始使用 sqlite 来处理持久数据库 我已经创建了模型和上下文 当我在包管理器控制台中运行添加迁移时 它似乎工作正常 但是当我运行更新数据库函数时 我总是得到一个 对象引
  • Codeigniter+PhpBB 函数重新声明

    我正在尝试将 phpbb 集成到 codeigniter 中 我不希望用户注册论坛 站点登录 注册控制器也应该处理论坛部分 所以我正在编写一个 ci 库来注册 登录 phpbb 我收到错误 因为我在 ci 库中包含了 phpbb 函数和库
  • 从服务中调用正在运行的活动中的方法

    我目前正在开发一个 Android 项目 到目前为止 我已经实现了 Firebase 特别是 FirebaseInstanceIdService 和 FirebaseMessagingService public class Firebas
  • 使用 pandas.DataFrame.plot 方法时出现 Timeserie datetick 问题

    我刚刚在使用时发现了一些非常奇怪的事情plot的方法pandas DataFrame 我正在使用熊猫0 19 1 这是我的 MWE import numpy as np import matplotlib pyplot as plt imp
  • 如何对列表列表进行排序?

    我有一个我想要排序的列表 foreach var Row in Result foreach var RowAll in Row All DataObject Add new List
  • 将 MaxMind java 类与 ColdFusion 结合使用

    我正在尝试将 MaxMind java 库与 ColdFusion 一起使用 我开始在 MaxMind 官方网站上转换此示例代码 A File object pointing to your GeoIP2 or GeoLite2 datab
  • Laravel 基本身份验证

    我想用basic auth对于我的网页 但身份验证不起作用 路线 php admin 验证 Route get admin array before gt auth basic function return Top secret crea
  • 缓存图像并显示

    您好 我面临一个特殊问题 我需要下载图像并将其显示到ListView对应他们特定的TextView s 我的代码成功显示了TextView s我需要显示 但我不知道如何在我的文本视图旁边显示所有这些不同的图像ListView 在经历了SO中
  • 地理位置和半正矢公式

    我正在尝试创建一个基本的 Web 应用程序 用于检测用户的地理位置 查询 mySQL 数据库并返回 5 公里内的所有公交车站 包括经度和纬度的 GTFS 提要已插入到 mySQL 数据库中 我找到了一个示例 HTML 页面 它提供了访问 W
  • 通过 XML 和 Java 代码使用 OnClickListener 接口有何不同? [复制]

    这个问题在这里已经有答案了 可能的重复 OnClick 事件和 OnClickListener 之间的区别 https stackoverflow com questions 7453299 difference between oncli