Android Studio 有关 setOnClickListener() 方法的总结
•前言
在 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() 方法的总结的更多相关文章
- 【转】 Android Studio SVN 使用方法
Android Studio SVN 使用方法 如何安装配置SVN 请直接参考<SVN在Android Studio中的配置> http://www.cnblogs.com/songmen ...
- Android Studio更新升级方法
自从2013 Google I/O大会之后,笔者就将android ide开发工具从eclipse迁移到Android Studio了,android studio一直在更新完善,为了与时俱进,我们当 ...
- Android studio 加速编译方法
JRebel for Android 是一个Android Studio的插件,可以大大加速Android Studio的编译速度,对于小项目来说或许不明显:但是当项目达到一定的规模时,它对于Andr ...
- Android Studio更新升级方法(转)
自从2013 Google I/O大会之后,笔者就将android ide开发工具从eclipse迁移到Android Studio了,android studio一直在更新完善,为了与时俱进,我们当 ...
- mac os下提高android studio运行速度终极方法
/Users/hangliao/ 删除(.android .gradle)两个文件夹 android studio恢复所有设置到初始化状态,这样会删除已创建的模拟器,所以需从创建一下模拟器 mac ...
- android studio gradle 更新方法。
Android studio更新 第一步:在你所在项目文件夹下:你项目根目录gradlewrapper gradle-wrapper.properties (只要在打开项目的时候选OK,这个文件就 ...
- Android Studio Gradle优化方法
第一步:打开AS安装所在的位置,用记事本打开"红色框"选中的文件. 如图: 第二步:打开"studio64.exe.vmoptions"文件后修改里面的值,修改 ...
- Android studio的调试方法
1. DDMS DDMS 全称 Dalvik Debug Monitor Service, dalvik虚拟机调试监控服务. 可以进行的操作有:为测试设备截屏,查看特定行程中正在运行的线程以及堆信息. ...
- 在mac上无法使用Android Studio的解决方法
随着android Studio 1.0的正式发布,估计使用的人会越来越多,并且官网上现在已经没有融合好的eclipse下载了,官方推荐下载android Studio.之前的beta版我也安装过,好 ...
- Android Studio 函数使用方法提示 快捷键
看到好多说用F2的,转来转去,中国社区的氛围大概如此,你抄我的,我超你的. 下面的千篇一律: "悬浮窗不出来了,各种不习惯啊.那在Android Studio究竟怎样查看函数的说明呢.选中你 ...
随机推荐
- Django笔记七之ManyToMany和OneToOne介绍
本文首发于本人微信公众号:Hunter后端 原文链接:Django笔记七之ManyToMany和OneToOne介绍 ManyToMany 是一种多对多的关系,在用途和使用方法上和外键 Foreign ...
- TeXStudio与Bakoma TeX 结合实现实时阅览
参考链接:VSCode 或 TeXStudio LaTeX 配置方法 - 知乎 相信大家在使用TeXStudio时候,每次修改完毕都要运行一下再能看到PDF界面,这样做十分不方便,因此先给出如下操作办 ...
- 2.11 PE结构:添加新的节区
在可执行PE文件中,节(section)是文件的组成部分之一,用于存储特定类型的数据.每个节都具有特定的作用和属性,通常来说一个正常的程序在被编译器创建后会生成一些固定的节,通过将数据组织在不同的节中 ...
- 分布式压测之locust和Jmeter的使用
受限于单台机器的配置问题,我们在单台机器上达不到一个很高的压测并发数,那这个时候就需要引入分布式压测 分布式压测原理: 一般通过局域网把不同测试计算机链接到一起,达到测试共享.分散操作.集中管理的目的 ...
- 4599元 铭凡推出NAG6迷你主机:12代i9+RX 6600M
铭凡推出了新款迷你主机NAG6,首发价4599元. 据了解,新款迷你主机的处理器采用的是i9-12900H,14核心20线程.24MBL3缓存,最高睿频达5.0GHz. 不仅如此,新款迷你主机内置RX ...
- 深入浅出Java多线程(七):重排序与Happens-Before
引言 大家好,我是你们的老伙计秀才!今天带来的是[深入浅出Java多线程]系列的第七篇内容:重排序与Happens-Before.大家觉得有用请点赞,喜欢请关注!秀才在此谢过大家了!!! 在上一篇文章 ...
- 错误:基于tensorflow识别mnist数据集出现ResourceExhaustedError (see above for traceback): OOM when allocating tensor with shape[10000,32,28,28] and type float on
错误:最近,在尝试运行我以前博客代码的时候出现了如下错误 2020-04-03 10:53:22.982491: W tensorflow/core/common_runtime/bfc_alloca ...
- jvm的简介
什么是jvm? java虚拟机就是二进制字节码的运行环境.我们可以把jvm看做是运行在不同系统上的一个软件应用的计算机,就比如说我们要打开图片,就得用看图软件,或者我们要对文件进行解压,是不是得用解压 ...
- NC14545 经商
题目链接 题目 题目描述 小d是一个搞房地产的土豪.每个人经商都有每个人经商的手段,当然人际关系是需要放在首位的. 小d每一个月都需要列出来一个人际关系表,表示他们搞房地产的人的一个人际关系网,但是他 ...
- NC16758 [NOIP2000]单词接龙
题目链接 题目 题目描述 单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的"龙"(每个单词都最多在&quo ...
