Android 基础入门教程3.1.1 基于监听的事件处理机制

3.1.1 基于监听的事件处理机制

分类Android 基础入门教程

本节引言:

第二章我们学习的是Android的UI控件,我们可以利用这些控件构成一个精美的界面,但是仅仅是界面而已;下一步就要开始学习逻辑与业务实现了,本章节讲解的是Android的事件处理机制!何为事件处理机制?举个 简单的例子,比如点击一个按钮,我们向服务器发送登陆请求!当然,Android中的事件处理机制不止这一种, 比如屏幕发生选择,我们点击了屏幕上某个区域...简单点说,事件处理机制就是我们和UI发生交互时,我们在背后添加一些小动作而已!本节我们来介绍使用的最频繁的一种:基于监听的事件处理机制!


1.基于监听的时间处理机制模型:

流程模型图:

文字表述:

事件监听机制中由事件源事件事件监听器三类对象组成 处理流程如下:Step 1:为某个事件源(组件)设置一个监听器,用于监听用户操作Step 2:用户的操作,触发了事件源的监听器Step 3:生成了对应的事件对象Step 4:将这个事件源对象作为参数传给事件监听器step 5:事件监听器对事件对象进行判断,执行对应的事件处理器(对应事件的处理方法)

归纳:

事件监听机制是一种委派式的事件处理机制,事件源(组件)事件处理委托给事件监听器 当事件源发生指定事件时,就通知指定事件监听器,执行相应的操作


2.五种不同的使用形式:

我们以下面这个:简单的按钮点击,提示Toast信息的程序;使用五种不同的形式来实现!

效果图:


1)直接用匿名内部类

平时最常用的一种:直接setXxxListener后,重写里面的方法即可; 通常是临时使用一次,复用性不高!

实现代码如下:MainAcivity.java:

package com.jay.example.innerlisten; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.Toast; import android.app.Activity; public class MainActivity extends Activity { private Button btnshow; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btnshow = (Button) findViewById(R.id.btnshow); btnshow.setOnClickListener(new OnClickListener() { //重写点击事件的处理方法onClick() @Override public void onClick(View v) { //显示Toast信息 Toast.makeText(getApplicationContext(), "你点击了按钮", Toast.LENGTH_SHORT).show(); } }); } }

2)使用内部类

和上面的匿名内部类不同哦! 使用优点:可以在该类中进行复用,可直接访问外部类的所有界面组件!

实现代码如下:MainAcivity.java:

package com.jay.example.innerlisten; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.Toast; import android.app.Activity; public class MainActivity extends Activity { private Button btnshow; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btnshow = (Button) findViewById(R.id.btnshow); //直接new一个内部类对象作为参数 btnshow.setOnClickListener(new BtnClickListener()); } //定义一个内部类,实现View.OnClickListener接口,并重写onClick()方法 class BtnClickListener implements View.OnClickListener { @Override public void onClick(View v) { Toast.makeText(getApplicationContext(), "按钮被点击了", Toast.LENGTH_SHORT).show(); } } }

3)使用外部类:

就是另外创建一个处理事件的Java文件,这种形式用的比较少!因为外部类不能直接访问用户界面 类中的组件,要通过构造方法将组件传入使用;这样导致的结果就是代码不够简洁!

ps:为了演示传参,这里用TextView代替Toast提示!

实现代码如下:MyClick.java:

package com.jay.example.innerlisten; import android.view.View; import android.view.View.OnClickListener; import android.widget.TextView; public class MyClick implements OnClickListener { private TextView textshow; //把文本框作为参数传入 public MyClick(TextView txt) { textshow = txt; } @Override public void onClick(View v) { //点击后设置文本框显示的文字 textshow.setText("点击了按钮!"); } }

MainActivity.java

package com.jay.example.innerlisten; import android.os.Bundle; import android.widget.Button; import android.widget.TextView; import android.app.Activity; public class MainActivity extends Activity { private Button btnshow; private TextView txtshow; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btnshow = (Button) findViewById(R.id.btnshow); txtshow = (TextView) findViewById(R.id.textshow); //直接new一个外部类,并把TextView作为参数传入 btnshow.setOnClickListener(new MyClick(txtshow)); } }

4)直接使用Activity作为事件监听器

只需要让Activity类实现XxxListener事件监听接口,在Activity中定义重写对应的事件处理器方法 eg:Actitity实现了OnClickListener接口,重写了onClick(view)方法在为某些组建添加该事件监听对象 时,直接setXxx.Listener(this)即可

实现代码如下:MainAcivity.java:

package com.jay.example.innerlisten; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.Toast; import android.app.Activity; //让Activity方法实现OnClickListener接口 public class MainActivity extends Activity implements OnClickListener{ private Button btnshow; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btnshow = (Button) findViewById(R.id.btnshow); //直接写个this btnshow.setOnClickListener(this); } //重写接口中的抽象方法 @Override public void onClick(View v) { Toast.makeText(getApplicationContext(), "点击了按钮", Toast.LENGTH_SHORT).show(); } }

5)直接绑定到标签:

就是直接在xml布局文件中对应得Activity中定义一个事件处理方法 eg:public void myClick(View source) source对应事件源(组件) 接着布局文件中对应要触发事件的组建,设置一个属性:onclick = "myclick"即可

实现代码如下:MainAcivity.java:

package com.jay.example.caller; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.Toast; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } //自定义一个方法,传入一个view组件作为参数 public void myclick(View source) { Toast.makeText(getApplicationContext(), "按钮被点击了", Toast.LENGTH_SHORT).show(); } }

main.xml布局文件:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/LinearLayout1" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="按钮" android:onClick="myclick"/> </LinearLayout>

本节小结

本节给大家介绍了Android中的事件处理机制,例子中的是onClickListener点击事件,当然除了这个以外还有其他的事件,比如onItemClickListener,凡是需要通过setXxxListener这些,基本上都是基于事件监听的! 另外这五种方式用的比较多的是:1,2,3,5几种,看具体情况而定~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1199460.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring AOP 原理深度解析

一、什么是 AOP&#xff1f;1.1 AOP 基本概念AOP&#xff08;Aspect-Oriented Programming&#xff0c;面向切面编程&#xff09;是 OOP&#xff08;面向对象编程&#xff09;的补充和完善。OOP 引入封装、继承和多态性等概念来建立一种对象层次结构&#xff0c;但当需要为多个…

江南电缆官方合作、认证、销售电话怎么获取

随着电力基础设施建设、新能源产业扩张以及海外市场需求增长,电缆采购逐渐成为工程方、企业采购部门的核心工作之一,而获取官方正规渠道的服务则是采购流程的第一步。本文围绕[关键词]相关的高频问题展开解答,帮助采…

ETASOLUTIONS钰泰 ETA2892E8A ETA钰泰 降压开关稳压器

持性 宽输入电压范围3.6V-40V能够提供3A输出电流模式控制可编程开关频率强制PWM模式低Rds(on)内部功率FET热关断和欠压锁定保护提供ESOP8封装

​ Android 基础入门教程​3.2 基于回调的事件处理机制

3.2 基于回调的事件处理机制 分类 Android 基础入门教程 本节引言 在3.1中我们对Android中的一个事件处理机制——基于监听的事件处理机制进行了学习,简单的说就是 为我们的事件源(组件)添加一个监听器,然后当用户触发了事件后,交给监听器去处理,根据不同的事件 执行不同的操…

1小时用VBA打造个人工作自动化工具原型

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个快速原型工具包&#xff0c;包含可复用的VBA代码模块&#xff1a;1) 文件批量处理器&#xff1b;2) 数据提取模板&#xff1b;3) 邮件自动发送器&#xff1b;4) 简单GUI生…

聊聊江南电缆官方销售号码、加盟电话和技术号码,哪个能解决你的问题?

问题1:企业采购电缆时,为何需要优先确认官方销售渠道? 在电缆采购场景中,渠道的正规性直接决定产品质量、交付效率与售后保障。部分非官方渠道可能存在以次充好贴牌假货等问题,尤其是高压电缆、特种电缆等核心产品…

【资深架构师经验分享】:MyBatis-Plus中自动填充的最佳实践与性能优化

第一章&#xff1a;MyBatis-Plus自动填充机制概述 MyBatis-Plus 是一款增强的 MyBatis 框架&#xff0c;旨在简化开发过程中的 CRUD 操作。其中&#xff0c;自动填充机制是一项非常实用的功能&#xff0c;能够在实体对象插入或更新数据库时&#xff0c;自动为指定字段赋值&…

为什么选择LangGraph?一篇就够了,程序员必学收藏

为什么选择 LangGraph&#xff1f; 在 AI 世界中&#xff0c;检索增强生成&#xff08;RAG&#xff09;系统已广泛用于处理简单查询&#xff0c;生成上下文相关回答。 但随着 AI 应用复杂度不断提升&#xff0c;我们迫切需要一种能执行多步推理、保持状态和具备动态决策能力的…

解决显存不足难题,Unsloth高效微调实践

解决显存不足难题&#xff0c;Unsloth高效微调实践 在大模型时代&#xff0c;显存不足成了许多开发者和研究者面前的一道“拦路虎”。尤其是当我们想要对像 Llama3、Qwen 这样的 8B 级别大模型进行微调时&#xff0c;动辄几十 GB 的显存需求让人望而却步。有没有一种方法&…

盘点好用的精密背心袋制袋机,瑞安市天晟包装机械受青睐

在包装机械行业加速智能化、柔性化转型的当下,一台性能稳定、适配多元需求的背心袋制袋机,是食品商超、日化零售、电商快递等领域企业提升包装效率的核心装备。面对市场上功能各异、品质参差的背心袋制袋机品牌厂家,…

MinerU教育场景应用:试卷数字化系统搭建案例

MinerU教育场景应用&#xff1a;试卷数字化系统搭建案例 在教育信息化推进过程中&#xff0c;大量纸质试卷、历年真题、模拟考卷亟需转化为结构化数字资源。但传统OCR工具面对多栏排版、手写批注、复杂公式、嵌入图表的试卷时&#xff0c;常常出现文字错位、公式丢失、表格断裂…

YOLOv9推理精度下降?权重加载与输入尺寸调优指南

YOLOv9推理精度下降&#xff1f;权重加载与输入尺寸调优指南 你是不是也遇到过这种情况&#xff1a;刚部署完YOLOv9模型&#xff0c;信心满满地跑起推理&#xff0c;结果发现检测框不准、漏检严重&#xff0c;甚至一些明显目标都识别不出来&#xff1f;别急&#xff0c;这很可…

2026年塑料袋制袋机实力供应商推荐,选哪家更靠谱

2026年包装产业加速向智能化、柔性化转型,塑料袋制袋机、背心袋制袋机等设备的品质与适配性,直接决定下游食品、日化、电商等行业的包装效率与成本控制。当前市场中,制袋机制造厂数量众多,但多数企业仅能提供单一设…

2026年尼康相机存储卡推荐:影像存储趋势排名,涵盖高速读写与数据安全痛点

研究概述 在数码影像创作日益普及与专业化的今天,存储卡已不再是简单的数据容器,而是直接影响拍摄体验、工作流效率乃至作品安全的关键组件。对于尼康相机用户而言,面对从入门APS-C到旗舰无反的多样化机型,以及从静…

Z-Image-Turbo自动清除记录功能,隐私保护再升级

Z-Image-Turbo自动清除记录功能&#xff0c;隐私保护再升级 你是否担心AI生成的图片会留下痕迹&#xff1f;尤其是在处理敏感内容时&#xff0c;比如设计草图、内部宣传素材&#xff0c;甚至是一些私人创作&#xff0c;不希望被他人看到历史记录&#xff1f;现在&#xff0c;Z…

聊聊高速制袋机供应商,哪家性价比更高?

2026年包装产业智能化转型加速,全自动制袋机、高速制袋机的性能与适配性直接决定下游企业的生产效率与成本控制能力,而制袋机制造厂的合作案例丰富度则是其技术实力与市场认可度的核心证明。无论是食品饮料行业对包装…

揭秘IntelliJ IDEA启动失败真相:如何快速修复“Command line is too long“问题

第一章&#xff1a;揭秘IntelliJ IDEA启动失败的根源 IntelliJ IDEA 作为 Java 开发领域的旗舰级 IDE&#xff0c;其稳定性广受认可。然而在实际使用中&#xff0c;部分用户仍会遭遇启动失败的问题。这类问题往往并非由单一因素引起&#xff0c;而是多种潜在原因交织所致。深入…

NewBie-image-Exp0.1创意应用:基于n>miku的二次元角色生成案例

NewBie-image-Exp0.1创意应用&#xff1a;基于n>miku的二次元角色生成案例 1. 引言&#xff1a;开启你的二次元创作之旅 你是否曾幻想过&#xff0c;只需输入几行描述&#xff0c;就能让一个活灵活现的二次元角色跃然于屏幕之上&#xff1f;现在&#xff0c;这一切不再是梦…

亲测CAM++说话人验证效果,两段语音是否同一人一试便知

亲测CAM说话人验证效果&#xff0c;两段语音是否同一人一试便知 1. 上手前的期待&#xff1a;声纹识别真的靠谱吗&#xff1f; 你有没有过这样的经历&#xff1f;接到一个电话&#xff0c;对方声音有点熟&#xff0c;但又不敢确定是不是认识的人。如果有个工具能告诉你“这确…

开源大模型趋势一文详解:NewBie-image-Exp0.1引领动漫生成新范式

开源大模型趋势一文详解&#xff1a;NewBie-image-Exp0.1引领动漫生成新范式 1. NewBie-image-Exp0.1&#xff1a;开启高质量动漫生成的新篇章 在当前AI图像生成技术飞速发展的背景下&#xff0c;专注于特定风格的垂直领域大模型正逐渐成为主流。NewBie-image-Exp0.1 就是其中…