Android中OnClick的五种实现方式 ---------------------- (来源于尚学堂的尧玮老师)

本文主要是介绍Android中OnClick的五种实现方式 ---------------------- (来源于尚学堂的尧玮老师),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1、控件的OnClick属性,设置点击事件的响应方法名android:onClick=”方法名”
缺点:当类的代码较多,方法和内部类较多时,代码管理不方便
优点:屏蔽所有的内部机制,不需要掌握回调机机制,学习测试阶段用(程序规模很小)

activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><Button android:id="@+id/btn_Framelayout"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="用表格布局实现注册"android:onClick="framelayout"/><Button android:id="@+id/btn_Gridlayout"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="用网格布局实现注册"android:onClick="gridlayout"/><Button android:id="@+id/btn_Linearlayout"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="用线性布局实现注册"android:onClick="linearlayout"/><Button android:id="@+id/btn_Relativelayout"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="用绝对布局实现注册"android:onClick="relativelayout"/><Button android:id="@+id/btn_Tablelayout"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="用表格布局实现注册"android:onClick="tablelayout"/></LinearLayout>

布局文件

MainActivity.java

package com.example.day03_03;import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}public void framelayout(View f) {setContentView(R.layout.framelayout);}//下面是 onClick值是gridLayout的按钮的点击事件响应的方法public void gridlayout(View g) { Log.i("Main", ((Button)g).getText().toString());//Main是LogCat里已存在的过滤器名setContentView(R.layout.gridlayout);}public void linearlayout(View l) {setContentView(R.layout.linearlayout);}public void relativelayout(View r) {setContentView(R.layout.relativelayout);}public void tablelayout(View t) {setContentView(R.layout.tablelayout);}   
}

2、匿名内部类
特点:没有复用性,一次性使用;项目较大时,方便代码的管理(从结构层看,set的方法,都时监听器[ctrl+o,再输入set])

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent" ><Button
        android:id="@+id/button"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="点我呀!" /></RelativeLayout>

MainActivity.java

package com.example.day05_01;import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);setListener();//设置监听器}private void setListener() {Button button = (Button) findViewById(R.id.button);button.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {Toast.makeText(MainActivity.this, "button按钮被点击", 3000).show();}});}
}

定义多个监听器参考代码:

package com.example.day05_01;import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);setListener();//可以接着set其他的监听器,如setReturnListener();}private void setListener() {setOnClickListener();//可以继续添加监听,如setReturnListener()}private void setOnClickListener() {Button button = (Button) findViewById(R.id.button);//new 一个匿名内部类button.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {Toast.makeText(MainActivity.this, "button按钮被点击", 3000).show();}});}
}

3、内部类实现方式:适用于监听器具有复用性(当前类中,好几个地方用到监听器,提取出来,变成一个内部类,用的时候new一个内部类就行)

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent" ><Button
        android:id="@+id/btnLogin"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="登录"android:onClick="onClick" /></RelativeLayout>

MainActivity.java

package com.example.day05_04;
import android.os.Bundle;
import android.app.Activity;
import android.speech.RecognizerResultsIntent;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Toast;
public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);findViewById(R.id.btnLogin).setOnClickListener(new LoginClickListener());       }class LoginClickListener implements OnClickListener{@Overridepublic void onClick(View v) {if(v.getId() == R.id.btnLogin){Toast.makeText(MainActivity.this, "点击登录按钮", 2000).show();}}}
}

4、Android类实现OnClickListener接口:用于按钮较多,但是监听处理的代码不多时

activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical" ><Button
        android:id="@+id/btnLogin"android:layout_width="fill_parent"android:layout_height="wrap_content"android:text="登录"android:onClick="onClick" /><Button
        android:id="@+id/btnExit"android:layout_width="fill_parent"android:layout_height="wrap_content"android:text="退出"android:onClick="onClick" /></LinearLayout>

MainActivity.java

package com.example.day05_03;import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Toast;public class MainActivity extends Activity implements OnClickListener{@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//将mainActivity.this地址保存在Button.mOnClickListener属性中findViewById(R.id.btnLogin).setOnClickListener(this);findViewById(R.id.btnExit).setOnClickListener(this);}//对单击事件集中处理@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.btnLogin:Toast.makeText(this, "执行登录操作", 3000).show();break;case R.id.btnExit:finish();default:break;}}}

5、外部类实现接口:适用于监听器具有复用性,有利于代码的混淆[在src下新建一个class类]

activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><LinearLayout
        android:layout_width="match_parent"android:layout_height="wrap_content" ><TextView
        android:layout_width="wrap_content"android:layout_height="wrap_content"android:textSize="16sp"android:text="输入编号" /><EditText android:id="@+id/etId"android:layout_width="0dp" android:layout_weight="1"android:layout_height="wrap_content"android:hint="2-10个字符"/>        
</LinearLayout><LinearLayout
        android:layout_width="match_parent"android:layout_height="wrap_content"><TextView
        android:layout_width="wrap_content"android:layout_height="wrap_content"android:textSize="16sp"android:text="密    码"/><EditText android:id="@+id/etPwd"android:layout_width="0dp" android:layout_weight="1"android:layout_height="wrap_content"android:password="true"android:hint="2-10个字符"/>        
</LinearLayout><LinearLayout
        android:layout_width="match_parent"android:layout_height="wrap_content" ><View android:layout_width="0dp"android:layout_height="30dp"android:visibility="invisible"android:layout_weight="1"/> <Button android:id="@+id/btnLogin"android:layout_width="wrap_content"android:layout_height="wrap_content"android:drawableLeft="@drawable/login32x32"android:background="@drawable/btn_bg"android:text="登陆"/><View android:layout_width="0dp"android:layout_height="30dp"android:visibility="invisible"android:layout_weight="1"/>     <Button android:id="@+id/btnExit"android:layout_width="wrap_content"android:layout_height="wrap_content"android:drawableLeft="@drawable/exit32x32"android:background="@drawable/btn_bg"android:text="退出"/><View android:layout_width="0dp"android:layout_height="30dp"android:visibility="invisible"android:layout_weight="1"/> 
</LinearLayout></LinearLayout>

这里写图片描述

MainActivity.java

package com.example.day05_05;import android.os.Bundle;
import android.app.Activity;
import android.speech.RecognizerResultsIntent;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.EditText;
import android.widget.Toast;public class MainActivity extends Activity {EditText metId,metPwd;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initView();setListener();}private void setListener() {MyClickListener listener = new MyClickListener(metId, metPwd, this);findViewById(R.id.btnLogin).setOnClickListener(listener);findViewById(R.id.btnExit).setOnClickListener(listener);}private void initView() {metId = (EditText) findViewById(R.id.etId);metPwd = (EditText) findViewById(R.id.etPwd);}
}

MyClickListener.java

package com.example.day05_05;import android.view.View;
import android.view.View.OnClickListener;
import android.widget.EditText;
import android.widget.Toast;public class MyClickListener implements OnClickListener {EditText metId,metPwd;MainActivity mActivity; public MyClickListener(EditText metId, EditText metPwd,MainActivity mActivity) {super();this.metId = metId;this.metPwd = metPwd;this.mActivity = mActivity;}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.btnExit:mActivity.finish();break;case R.id.btnLogin:String id = metId.getText().toString();String pwd = metPwd.getText().toString();Toast.makeText(mActivity,"登录编号:"+id+ "登录密码:"+ pwd, Toast.LENGTH_LONG).show();break;default:break;}}
}

这是看完视频之后整理的,希望对您有用~

这篇关于Android中OnClick的五种实现方式 ---------------------- (来源于尚学堂的尧玮老师)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/214183

相关文章

gradle第三方Jar包依赖统一管理方式

《gradle第三方Jar包依赖统一管理方式》:本文主要介绍gradle第三方Jar包依赖统一管理方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录背景实现1.顶层模块build.gradle添加依赖管理插件2.顶层模块build.gradle添加所有管理依赖包

使用Python实现IP地址和端口状态检测与监控

《使用Python实现IP地址和端口状态检测与监控》在网络运维和服务器管理中,IP地址和端口的可用性监控是保障业务连续性的基础需求,本文将带你用Python从零打造一个高可用IP监控系统,感兴趣的小伙... 目录概述:为什么需要IP监控系统使用步骤说明1. 环境准备2. 系统部署3. 核心功能配置系统效果展

Python实现微信自动锁定工具

《Python实现微信自动锁定工具》在数字化办公时代,微信已成为职场沟通的重要工具,但临时离开时忘记锁屏可能导致敏感信息泄露,下面我们就来看看如何使用Python打造一个微信自动锁定工具吧... 目录引言:当微信隐私遇到自动化守护效果展示核心功能全景图技术亮点深度解析1. 无操作检测引擎2. 微信路径智能获

Python中pywin32 常用窗口操作的实现

《Python中pywin32常用窗口操作的实现》本文主要介绍了Python中pywin32常用窗口操作的实现,pywin32主要的作用是供Python开发者快速调用WindowsAPI的一个... 目录获取窗口句柄获取最前端窗口句柄获取指定坐标处的窗口根据窗口的完整标题匹配获取句柄根据窗口的类别匹配获取句

Linux之systemV共享内存方式

《Linux之systemV共享内存方式》:本文主要介绍Linux之systemV共享内存方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、工作原理二、系统调用接口1、申请共享内存(一)key的获取(二)共享内存的申请2、将共享内存段连接到进程地址空间3、将

Maven中引入 springboot 相关依赖的方式(最新推荐)

《Maven中引入springboot相关依赖的方式(最新推荐)》:本文主要介绍Maven中引入springboot相关依赖的方式(最新推荐),本文给大家介绍的非常详细,对大家的学习或工作具有... 目录Maven中引入 springboot 相关依赖的方式1. 不使用版本管理(不推荐)2、使用版本管理(推

在 Spring Boot 中实现异常处理最佳实践

《在SpringBoot中实现异常处理最佳实践》本文介绍如何在SpringBoot中实现异常处理,涵盖核心概念、实现方法、与先前查询的集成、性能分析、常见问题和最佳实践,感兴趣的朋友一起看看吧... 目录一、Spring Boot 异常处理的背景与核心概念1.1 为什么需要异常处理?1.2 Spring B

Python位移操作和位运算的实现示例

《Python位移操作和位运算的实现示例》本文主要介绍了Python位移操作和位运算的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1. 位移操作1.1 左移操作 (<<)1.2 右移操作 (>>)注意事项:2. 位运算2.1

如何在 Spring Boot 中实现 FreeMarker 模板

《如何在SpringBoot中实现FreeMarker模板》FreeMarker是一种功能强大、轻量级的模板引擎,用于在Java应用中生成动态文本输出(如HTML、XML、邮件内容等),本文... 目录什么是 FreeMarker 模板?在 Spring Boot 中实现 FreeMarker 模板1. 环

Qt实现网络数据解析的方法总结

《Qt实现网络数据解析的方法总结》在Qt中解析网络数据通常涉及接收原始字节流,并将其转换为有意义的应用层数据,这篇文章为大家介绍了详细步骤和示例,感兴趣的小伙伴可以了解下... 目录1. 网络数据接收2. 缓冲区管理(处理粘包/拆包)3. 常见数据格式解析3.1 jsON解析3.2 XML解析3.3 自定义