•前言

  在 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 从嫌弃到依赖(23)——最后的闲扯

    截止到上一篇文章,关于vim的基础操作都已经讨论完了,这篇我主要就是闲扯,瞎聊.就想毕业论文都有一个致谢一样,这篇我们就作为整个系列的致谢吧 学习vim到底能给我们带来什么 学习vim到底能给我们带来 ...

  2. 精进语言模型:探索LLM Training微调与奖励模型技术的新途径

    精进语言模型:探索LLM Training微调与奖励模型技术的新途径 LLMs Trainer 是一个旨在帮助人们从零开始训练大模型的仓库,该仓库最早参考自 Open-Llama,并在其基础上进行扩充 ...

  3. FFmpeg的录制命令

    FFmpeg的录制命令 命令的作用 它可以捕捉桌面窗口,摄像头的视频流和麦克风的音频流. 命令的格式 ffmpeg [输入格式] [输入选项] -i [输入设备索引] [输出选项] 输出文件 其中输入 ...

  4. 解决SpringMVC项目Jquery引入不生效问题

    根据多方查询,总结Jquery不生效问题如下几种原因: web.xml中拦截了静态资源,但是springmvc配置文件没有对静态资源访问进行设置 <!-- <mvc:resources l ...

  5. C++11之函数对象

    目录 1.使用场景 2.函数对象 3.std::bind 4.总结 1.使用场景 在没有C++11的时候,我们通常使用回调函数来完成某些特定的功能,使用回调函数就需要先声明函数指针 示例: typed ...

  6. 可选可输入的input框

    <input type="text" list="note" autocomplete="off"> <datalist ...

  7. 【奶奶看了都会】Meta开源大模型LLama2部署使用教程,附模型对话效果

    1.写在前面 就在7月19日,MetaAI开源了LLama2大模型,Meta 首席科学家.图灵奖获得者 Yann LeCun在推特上表示Meta 此举可能将改变大模型行业的竞争格局.一夜之间,大模型格 ...

  8. 文心一言 VS 讯飞星火 VS chatgpt (195)-- 算法导论14.3 3题

    三.用go语言,请给出一个有效的算法,对一个给定的区间i,返回一个与i重叠且具有最小低端点的区间;或者当这样的区间不存在时返回T.nil. 文心一言,去掉math,代码正常运行: 在Go语言中,你可以 ...

  9. 【调试】pstore原理和使用方法总结

    什么是pstore pstore最初是用于系统发生oops或panic时,自动保存内核log buffer中的日志.不过在当前内核版本中,其已经支持了更多的功能,如保存console日志.ftrace ...

  10. 【LGR-154-Div.4】洛谷入门赛 #15

    [LGR-154-Div.4]洛谷入门赛 #15 \(A\) luoguB3813 [语言月赛 202308]四个人的排名加起来没有小粉兔高 AC 水题. #include<bits/stdc+ ...