•前言

  在 Android Studio 开发中,你会经常和这种代码打交道:

 1 package com.example.activitytest;
2 public class FirstActivity extends AppCompatActivity {
3
4 @Override
5 protected void onCreate(Bundle savedInstanceState) {
6
7 super.onCreate(savedInstanceState);
8 setContentView(R.layout.first_layout);//给当前的活动加载一个布局
9 Button btn1 = findViewById(R.id.btn_1);
10
11 btn1.setOnClickListener(new View.OnClickListener(){
12 public void onClick(View v){
13
14 });
15 }
16 }

  那么,setOnClickListener() 方法起到什么作用呢?

  在本次代码中,setOnClickListener() 方法为按钮注册一个监听器,点击按钮时就会执行监听器中的 onClick() 方法。

  onClicklistener是一个接口,不能实例化,这就是一个匿名内部类。

•两种方式实现点击事件

  • 用匿名类来实现点击事件

  • 用外部类来实现点击事件

•Code

.java 代码:

 1 package com.example.activitytest;
2
3 import android.os.Bundle;
4 import android.view.View;
5 import android.widget.Button;
6 import android.widget.Toast;
7
8 import androidx.appcompat.app.AppCompatActivity;
9
10 public class FirstActivity extends AppCompatActivity {
11
12 @Override
13 protected void onCreate(Bundle savedInstanceState) {
14
15 super.onCreate(savedInstanceState);
16 setContentView(R.layout.first_layout);//给当前的活动加载一个布局
17
18 Button btn1 = findViewById(R.id.btn_1);
19 Button btn2 = findViewById(R.id.btn_2);
20
21 //用匿名类来实现点击事件的方法
22 btn1.setOnClickListener(new View.OnClickListener(){
23 public void onClick(View v){
24 Toast.makeText(FirstActivity.this,"用匿名类来实现点击事件",Toast.LENGTH_SHORT).show();
25 }
26 });
27
28 btn2.setOnClickListener(new MyClick());
29 }
30 //用外部类来实现点击事件的代码如下
31 class MyClick implements View.OnClickListener{
32
33 @Override
34 public void onClick(View v) {
35 Toast t = Toast.makeText(FirstActivity.this,"用外部类来实现点击事件",Toast.LENGTH_SHORT);
36 t.show();
37 }
38 }
39 }

.xml 代码:

 1 <?xml version="1.0" encoding="utf-8"?>
2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
3 android:layout_width="match_parent"
4 android:layout_height="match_parent"
5 android:orientation="vertical"
6 android:padding="10dp">
7
8 <Button
9 android:id="@+id/btn_1"
10 android:layout_width="match_parent"
11 android:layout_height="wrap_content"
12 android:layout_marginTop="10dp"
13 android:background="#33CCCC"
14 android:text="Button_1" />
15
16 <Button
17 android:id="@+id/btn_2"
18 android:layout_width="match_parent"
19 android:layout_height="wrap_content"
20 android:background="#D54D2B"
21 android:layout_marginTop="10dp"
22 android:text="Button_2"
23 />
24 </LinearLayout>

•运行效果

•精简代码

  分下如下代码:

 1 package com.example.helloworld;
2
3 import android.content.Intent;
4 import android.os.Bundle;
5 import android.view.View;
6 import android.widget.Button;
7
8 import androidx.appcompat.app.AppCompatActivity;
9
10 public class MainActivity extends AppCompatActivity {
11
12 private Button mBtn1;
13 private Button mBtn2;
14 private Button mBtn3;
15 private Button mBtn4;
16 private Button mBtn5;
17
18 @Override
19 protected void onCreate(Bundle savedInstanceState) {
20 super.onCreate(savedInstanceState);
21 setContentView(R.layout.activity_main);
22
23 mBtn1 = findViewById(R.id.btn_1);
24
25 mBtn1.setOnClickListener(new View.OnClickListener(){
26 public void onClick(View v){
27 //跳转到 TextView 演示界面
28 Intent intent = new Intent(MainActivity.this, TextViewActivity.class);
29 startActivity(intent);
30 }
31 });
32
33 mBtn2 = findViewById(R.id.btn_2);
34 mBtn2.setOnClickListener(new View.OnClickListener() {
35 @Override
36 public void onClick(View v) {
37 Intent intent = new Intent(MainActivity.this,QQ.class);
38 startActivity(intent);
39 }
40 });
41
42 mBtn3 = findViewById(R.id.btn_3);
43 mBtn3.setOnClickListener(new View.OnClickListener() {
44 @Override
45 public void onClick(View v) {
46 Intent intent = new Intent(MainActivity.this,ButtonActivity.class);
47 startActivity(intent);
48 }
49 });
50
51 mBtn4 = findViewById(R.id.btn_4);
52 mBtn4.setOnClickListener(new View.OnClickListener() {
53 @Override
54 public void onClick(View v) {
55 Intent intent = new Intent(MainActivity.this,IntentActivity.class);
56 startActivity(intent);
57 }
58 });
59
60 mBtn5 = findViewById(R.id.btn_5);
61 mBtn5.setOnClickListener(new View.OnClickListener() {
62 @Override
63 public void onClick(View v) {
64 Intent intent = new Intent(MainActivity.this,EditTextActivity.class);
65 startActivity(intent);
66 }
67 });
68 }
69 }

  五个 Button 变量,每个变量调用了 setOnClickListener() 方法。

  每次调用都重写一遍 setOnClickListener() 方法,是不是看上去略微臃肿了一些?

  怎样才能给这段代码减减肥呢?

  答案是用外部类来实现点击事件;

  精简后的代码如下:

 1 package com.example.helloworld;
2
3 import android.content.Intent;
4 import android.os.Bundle;
5 import android.view.View;
6 import android.widget.Button;
7
8 import androidx.appcompat.app.AppCompatActivity;
9
10 public class MainActivity extends AppCompatActivity {
11
12 private Button mBtn1;
13 private Button mBtn2;
14 private Button mBtn3;
15 private Button mBtn4;
16 private Button mBtn5;
17 private Button mBtn6;
18 @Override
19 protected void onCreate(Bundle savedInstanceState) {
20 super.onCreate(savedInstanceState);
21 setContentView(R.layout.activity_main);
22
23 mBtn1 = findViewById(R.id.btn_1);
24 mBtn1.setOnClickListener(new MyClick());
25
26 mBtn2 = findViewById(R.id.btn_2);
27 mBtn2.setOnClickListener(new MyClick());
28
29 mBtn3 = findViewById(R.id.btn_3);
30 mBtn3.setOnClickListener(new MyClick());
31
32 mBtn4 = findViewById(R.id.btn_4);
33 mBtn4.setOnClickListener(new MyClick());
34
35 mBtn5 = findViewById(R.id.btn_5);
36 mBtn5.setOnClickListener(new MyClick());
37
38 mBtn6 = findViewById(R.id.btn_6);
39 mBtn6.setOnClickListener(new MyClick());
40
41 }
42 private class MyClick implements View.OnClickListener{
43
44 public void onClick(View v){
45 Intent intent = null;
46 switch(v.getId()){
47 case R.id.btn_1:
48 //填入对应的事件
49 intent = new Intent(MainActivity.this, TextViewActivity.class);
50 break;
51 case R.id.btn_2:
52 //填入对应的事件
53 intent = new Intent(MainActivity.this,QQ.class);
54 break;
55 case R.id.btn_3:
56 //填入对应的事件
57 intent = new Intent(MainActivity.this,ButtonActivity.class);
58 break;
59 case R.id.btn_4:
60 //填入对应的事件
61 intent = new Intent(MainActivity.this,IntentActivity.class);
62 break;
63 case R.id.btn_5:
64 //填入对应的事件
65 intent = new Intent(MainActivity.this,EditTextActivity.class);
66 break;
67 case R.id.btn_6:
68 //填入对应的事件
69 intent = new Intent(MainActivity.this,RedioButtonActivity.class);
70 break;
71 }
72 startActivity(intent);
73 }
74 }
75 }

  这么写,看着是不是舒服多了。

Android Studio 有关 setOnClickListener() 方法的总结的更多相关文章

  1. 【转】 Android Studio SVN 使用方法

    Android Studio SVN 使用方法 如何安装配置SVN 请直接参考<SVN在Android Studio中的配置> http://www.cnblogs.com/songmen ...

  2. Android Studio更新升级方法

    自从2013 Google I/O大会之后,笔者就将android ide开发工具从eclipse迁移到Android Studio了,android studio一直在更新完善,为了与时俱进,我们当 ...

  3. Android studio 加速编译方法

    JRebel for Android 是一个Android Studio的插件,可以大大加速Android Studio的编译速度,对于小项目来说或许不明显:但是当项目达到一定的规模时,它对于Andr ...

  4. Android Studio更新升级方法(转)

    自从2013 Google I/O大会之后,笔者就将android ide开发工具从eclipse迁移到Android Studio了,android studio一直在更新完善,为了与时俱进,我们当 ...

  5. mac os下提高android studio运行速度终极方法

    /Users/hangliao/ 删除(.android  .gradle)两个文件夹 android studio恢复所有设置到初始化状态,这样会删除已创建的模拟器,所以需从创建一下模拟器 mac ...

  6. android studio gradle 更新方法。

    Android studio更新 第一步:在你所在项目文件夹下:你项目根目录gradlewrapper gradle-wrapper.properties   (只要在打开项目的时候选OK,这个文件就 ...

  7. Android Studio Gradle优化方法

    第一步:打开AS安装所在的位置,用记事本打开"红色框"选中的文件. 如图: 第二步:打开"studio64.exe.vmoptions"文件后修改里面的值,修改 ...

  8. Android studio的调试方法

    1. DDMS DDMS 全称 Dalvik Debug Monitor Service, dalvik虚拟机调试监控服务. 可以进行的操作有:为测试设备截屏,查看特定行程中正在运行的线程以及堆信息. ...

  9. 在mac上无法使用Android Studio的解决方法

    随着android Studio 1.0的正式发布,估计使用的人会越来越多,并且官网上现在已经没有融合好的eclipse下载了,官方推荐下载android Studio.之前的beta版我也安装过,好 ...

  10. Android Studio 函数使用方法提示 快捷键

    看到好多说用F2的,转来转去,中国社区的氛围大概如此,你抄我的,我超你的. 下面的千篇一律: "悬浮窗不出来了,各种不习惯啊.那在Android Studio究竟怎样查看函数的说明呢.选中你 ...

随机推荐

  1. 从零开始配置 vim(7)——自动命令

    这篇我们来谈论vim一个相当重要的东西--自动命令. 从编程的角度来看,自动命令有点类似于事件响应,或者回调函数之类.当外部发生某些事件的时候,自动执行事先定义好的一组命令. 定义一个自动命令的格式如 ...

  2. 我手写了一个RPC框架。成功帮助读者斩获字节、阿里等大厂offer。

    本着开源精神,本项目README已经同步了英文版本.另外,项目的源代码的注释大部分也修改为了英文. 如访问速度不佳,可放在 Gitee 地址:https://gitee.com/SnailClimb/ ...

  3. 【Jmeter】按比例分配Api压测

    先看 [Jmeter]基础介绍-详细 [Jmeter]Request1输出作为Request2输入-后置处理器 继续聊提出的第二个问题,即 2.需要按比例分配API请求并发,以模拟真实的API压力场景 ...

  4. 驱动开发:WinDBG 常用调试命令总结

    Windbg是Microsoft公司免费调试器调试集合中的GUI的调试器,支持Source和Assembly两种模式的调试.Windbg不仅可以调试应用程序,还可以进行Kernel Debug.结合M ...

  5. Windows 11 ISO原版镜像文件下载(2024年01月)

    Windows 11 (business editions), version 23H2 (x64) - DVD (Chinese-Simplified) 链接:https://pan.baidu.c ...

  6. d3d12龙书阅读----数学基础 向量代数、矩阵代数、变换

    d3d12龙书阅读----数学基础 向量代数.矩阵代数.变换 directx 采用左手坐标系 点积与叉积 点积与叉积的正交化 使用点积进行正交化 使用叉积进行正交化 矩阵与矩阵乘法 转置矩阵 单位矩阵 ...

  7. 在K8s中,提供的DNS组件是什么?有什么特性?

    在Kubernetes (K8s)集群中,用于内部DNS服务的组件已经从早期的kube-dns过渡到了coredns. kube-dns(已弃用): 在Kubernetes 1.10版本之前,kube ...

  8. 解决每次 git pull/push 时都需要输入账号和密码的问题

    问题 在提交代码或者拉取代码的时候,如果每次git都要输入用户名密码 解决方法 1. 终端输入 git config --global credential.helper store 2. 在git ...

  9. Python-pymysql如何向SQL语句中传参

    方法一:不传递参数 ## 方式一.不传递参数 id = "01" name = "语文" sql = "select * from course wh ...

  10. Hadoop-基础知识面试题

    1.Hadoop集群的最主要瓶颈 磁盘IO 2.Hadoop三大组件 (1).HDFS HDFS(Hadoop Distributed File System)是 Hadoop 项目的核心子项目,主要 ...