•前言

  在 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. JavaScript快速入门(一)

    JavaScript快速入门(二) 语句 只需简单地把各条语句放在不同的行上就可以分隔它们 var a = 1 var b = 2 如果想把多条语句放在同一行上,就需要用分号隔开 var a = 1; ...

  2. 移动端跨平台动效工具Lottie, PAG的使用

    动效工具Lottie   Lottie 是 Airbnb 开源的一套跨平台的完整的动画效果解决方案,设计师可以使用 Adobe After Effects 设计出漂亮的动画之后,使用 Lottic 提 ...

  3. Leetcode刷题第三天-贪心-双指针

    738:单调递增 链接:738. 单调递增的数字 - 力扣(LeetCode) 嘶~介个介个恶心心,从后往前遍历,前一个数比当前数大,前一个数-1,当前数变为9 需要注意的是,保证每个9后面全是9 1 ...

  4. Laravel日期处理

    1. 常用: echo Carbon::now(); // 2023-04-08 18:07:24 echo Carbon::today(); // 2023-04-08 00:00:00 echo ...

  5. 基于OpenEuler的信创国产瘦客户机软件系统 DoraOS

    DoraOS是一款瘦客户机系统软件,最新版本基于OpenEuler开发.可以将主机转化为专业的瘦客户机.目前支持x86架构的硬件. 软件下载地址为: https://www.doracloud.cn/ ...

  6. Java 数字 默认是 Integer类型的问题,System.currentTimeMillis() + (180 * 24 * 60 * 60 * 1000)的问题,剖析、Long + Integer的问题

    最终结论: (180 * 24 * 60 * 60) 这种计算表达式在 Java中是默认以 Integer类型来的,若不超过 Integer的最大值则没有问题,若超过则必须用 (180 * 24 * ...

  7. java的char类型,只有两个字节,为什么可以存储汉字?java中 char详解

    我自己出了一道面试题,如下: public static void main(String[] args) { char a = '9'; char b = 9; char c = '我'; Syst ...

  8. Zookeeper-ZKFC的原理和功能

    一.前言 HADOOP2 HA架构引入了ZKFC.Journalnode组件,本篇文章主要介绍ZKFC的功能和原理.HA架构支持两种切换方式: 手动切换:  通过命令实现主备之间的切换,可以用HDFS ...

  9. Linux中echo的作用

    Linux echo命令 echo命令是一个内置在Bash中的shell,通常用于shell脚本中以显示消息或输出其他命令的结果. echo命令的语法如下: 1 echo [-neE] [ARGUME ...

  10. SavedStateHandle的介绍----ViewModel不具备保存状态数据的功能

    LiveData本身不能在进程销毁中存活,当内存不足时,Activity被系统杀死,ViewModel本身也会被销毁. 为了保存LiveData的数据,使用SavedStateHandle. 事故场景 ...