•前言

  在 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. 【Jmeter】基础介绍-详细

    最近做压测时使用到Jmeter,为什么用它,之前也做过部分压测,不是很系统,使用的是Apache Bench,虽然效率高,但是功能比较简单,不太适合本次压测场景,另外Jmeter能更好的利用压测机的多 ...

  2. 【五】gym搭建自己的环境之寻宝游戏,详细定义自己myenv.py文件以及算法实现

    相关文章: 相关文章: [一]gym环境安装以及安装遇到的错误解决 [二]gym初次入门一学就会-简明教程 [三]gym简单画图 [四]gym搭建自己的环境,全网最详细版本,3分钟你就学会了! [五] ...

  3. Libevent [补档-2023-08-29]

    libevent的使用 8-1 安装 ​ 自己百度一下,安装它不是特别难,加油!!! 8-2 libevent介绍 ​ 它是一个开源库,用于处理网络和定时器等等事件.它提供了跨平台的API,能够在不同 ...

  4. npm旧淘宝镜像过期,更换新淘宝镜像

    1. 清空缓存 npm cache clean --force 2.设置新淘宝镜像 npm config set registry https://registry.npmmirror.com/ 3. ...

  5. PHP中GD库

    PHP中GD库 一.GD库的介绍 1.GD库是什么? Graphic Device,图像工具库,gd库是php处理图形的扩展库,GD库提供了一系列用来处理图片的API,使用GD库可以处理图片,或者生成 ...

  6. CF1916E Happy Life in University 题解

    题目: CF1916E Happy Life in University 链接: 洛谷 或者 CF 前置知识点: 线段树与HH的项链 先简单回顾下HH的项链这题怎么做的吧.先去掉莫队算法,因为这个不是 ...

  7. 教你用JavaScript实现实时字符计数器

    案例介绍 欢迎来到我的小院,我是霍大侠,恭喜你今天又要进步一点点了!我们来用JavaScript编程实战案例,做一个实时字符计数器.用户在指定位置打字,程序实时显示字符数量. 案例演示 在编辑框内输入 ...

  8. CSS浮动&定位&布局

    浮动简介 浮动最早起设计出来是为了实现文字环绕图片或者文字环绕的效果,现在浮动是主流的页面布局方式之一 float:浮动属性,值可以是left.right对应向左和向右浮动 元素浮动之后的特点 脱离文 ...

  9. Python subProcess库以及Popen类的使用

    subprocess库是一个十分强大且常用的库,它可以用来调用第三方工具(例如:exe.另一个python文件.命令行工具). 1.常用函数call() :执行由参数提供的命令,把数组作为参数运行命令 ...

  10. MySQL树形结构表设计

    两个字段: pid:父级ID parent_ids:所有经过的路径节点ID 这样设计有个好处是,可以查任意节点的所有子节点,从任意节点开始既可以向上查,也可以向下查 select * from ent ...