[Android]Java中点击事件的四种写法
点击事件的必备条件:实现OnClickListener接口,重写onclick(View v)方法
以拨号简单案例为例,如下图效果:
逻辑流程:
- 获取点击对象,获取数据
- 给对象设置监听类
- 实现
OnClickListener接口,重写onClick(View v)方法
onClick(View v)逻辑:
获取输入内容:使用
EditText对象的getText()方法,该方法返回值为Editable,需要用toString()转换成String类型判断输入是否为空,
TextUtils.isEmpty(str)方法判断字符串str是否为空为空则提示
号码不能为空,使用Toast.makeText(MainActivity.this, "号码不能为空", Toast.LENGTH_SHORT).show();,
Toast makeText (Context context, CharSequence text, int duration)返回值为Toast,参数列表(Context对象,提示内容,显示时长)
- 如果不为空,
new一个Intent对象,使用Intent对象的setAction(String action)方法设置动作,使用Intent对象的setData(Uri uriData)方法设置数据。startActivity(Intent intent)方法启动Activity。
注:应该在程序清单文件AndroidManifest.xml中添加<uses-permission android:name="android.permission.CALL_PHONE"/>,拨打电话时,美国紧急电话不会直接拨打
三种方法:第四种不推荐,前三种酌情使用
1. 内部实现类
布局文件:activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="${relativePackage}.${activityClass}" >
<EditText
android:id="@+id/editText1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:focusable="true"
android:focusableInTouchMode="true"
android:hint="在此输入电话号码">
</EditText>
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/editText1"
android:layout_marginTop="14dp"
android:text="拨打此号码" />
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/button1"
android:text="Button2" />
<Button
android:id="@+id/button3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/button2"
android:text="Button3" />
</RelativeLayout>
MainActivity.java
package com.example.onclick1;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.os.storage.OnObbStateChangeListener;
import android.text.TextUtils;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends Activity {
private EditText editText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editText = (EditText) findViewById(R.id.editText1);
Button button1 = (Button) findViewById(R.id.button1);
Button button2 = (Button) findViewById(R.id.button2);
Button button3 = (Button) findViewById(R.id.button3);
//设置监听类
button1.setOnClickListener(new MyOnClickListener());
button2.setOnClickListener(new MyOnClickListener());
button3.setOnClickListener(new MyOnClickListener());
}
private class MyOnClickListener implements OnClickListener{
@Override
public void onClick(View v) {
int i = v.getId();
switch (i) {
case R.id.button1:
String number = editText.getText().toString();
if (TextUtils.isEmpty(number)) {
Toast.makeText(MainActivity.this, "号码不能为空", Toast.LENGTH_SHORT).show();
}else {
Intent intent = new Intent();
intent.setAction(intent.ACTION_CALL);
Uri data = Uri.parse("tel:"+number);
intent.setData(data);
startActivity(intent);
}
break;
case R.id.button2:
Toast.makeText(MainActivity.this, "你点击了Button2", Toast.LENGTH_SHORT).show();
break;
case R.id.button3:
Toast.makeText(MainActivity.this, "你点击了Button3", Toast.LENGTH_SHORT).show();
break;
}
}
}
}
2. 内部匿名类
MainActivity.java
package com.example.onclick1;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.os.storage.OnObbStateChangeListener;
import android.text.TextUtils;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends Activity {
private EditText editText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editText = (EditText) findViewById(R.id.editText1);
Button button1 = (Button) findViewById(R.id.button1);
Button button2 = (Button) findViewById(R.id.button2);
Button button3 = (Button) findViewById(R.id.button3);
//设置监听类
button1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
String number = editText.getText().toString();
if(TextUtils.isEmpty(number)){
Toast.makeText(MainActivity.this, "[内部匿名类]号码不能为空", Toast.LENGTH_SHORT).show();
}else{
Intent intent = new Intent();
intent.setAction(intent.ACTION_CALL);
intent.setData(Uri.parse("tel:"+number));
startActivity(intent);
}
}
});
button2.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this, "[内部匿名类]你点击了Button2", Toast.LENGTH_SHORT).show();
}
});
button3.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this, "[内部匿名类]你又点击了button3", Toast.LENGTH_SHORT).show();
}
});
}
}
3. Activity实现OnClickLitener
MainActivity.java
package com.example.onclick1;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.os.storage.OnObbStateChangeListener;
import android.text.TextUtils;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends Activity implements OnClickListener{
private EditText editText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editText = (EditText) findViewById(R.id.editText1);
Button button1 = (Button) findViewById(R.id.button1);
Button button2 = (Button) findViewById(R.id.button2);
Button button3 = (Button) findViewById(R.id.button3);
//设置监听类
button1.setOnClickListener(this);
button2.setOnClickListener(this);
button3.setOnClickListener(this);
}
@Override
public void onClick(View v) {
int id = v.getId();
switch (id) {
case R.id.button1:
String number = editText.getText().toString();
if (TextUtils.isEmpty(number)) {
Toast.makeText(this, "[Activity实现类]号码不能为空", Toast.LENGTH_SHORT).show();
}else {
Intent intent = new Intent();
intent.setAction(intent.ACTION_CALL);
intent.setData(Uri.parse("tel:"+number));
startActivity(intent);
}
break;
case R.id.button2:
Toast.makeText(this, "[Activity实现类]你点击了Button2", Toast.LENGTH_SHORT).show();
break;
case R.id.button3:
Toast.makeText(this, "[Activity实现类]你点击了Button3", Toast.LENGTH_SHORT).show();
break;
}
}
}
4. 结合layout文件声明方法
activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="${relativePackage}.${activityClass}" >
<EditText
android:id="@+id/editText1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:focusable="true"
android:focusableInTouchMode="true"
android:hint="在此输入电话号码">
</EditText>
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/editText1"
android:layout_marginTop="14dp"
android:onClick="button"
android:text="拨打此号码" />
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/button1"
android:onClick="button"
android:text="Button2" />
<Button
android:id="@+id/button3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/button2"
android:onClick="button"
android:text="Button3" />
</RelativeLayout>
MainActivity.java
package com.example.onclick1;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.os.storage.OnObbStateChangeListener;
import android.text.TextUtils;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void button(View v) {
EditText editText = (EditText) findViewById(R.id.editText1);
switch (v.getId()) {
case R.id.button1:
String number = editText.getText().toString();
if (TextUtils.isEmpty(number)) {
Toast.makeText(this, "[布局文件中Button的android:onClick属性]号码不能为空", Toast.LENGTH_SHORT).show();
}else {
Intent intent = new Intent();
intent.setAction(intent.ACTION_CALL);
intent.setData(Uri.parse("tel:"+number));
startActivity(intent);
}
break;
case R.id.button2:
Toast.makeText(this, "[布局文件中Button的android:onClick属性]你点击了Button2", Toast.LENGTH_SHORT).show();
break;
case R.id.button3:
Toast.makeText(this, "[布局文件中Button的android:onClick属性]你点击了Button3", Toast.LENGTH_SHORT).show();
break;
}
}
}
[Android]Java中点击事件的四种写法的更多相关文章
- Android中点击事件的四种写法详解
Android中点击事件的四种写法 使用内部类实现点击事件 使用匿名内部类实现点击事件 让MainActivity实现View.OnClickListener接口 通过布局文件中控件的属性 第一种方法 ...
- Android笔记---点击事件的四种写法
Android 点击事件的四种写法: 1. 以内部类的形式实现 OnClickListener 接口.定义点击事件 class MainActivity extents Activity{ // .. ...
- Android journey3 @点击事件的4种写法
对于android布局中的控件,如Button等会有相应的点击事件去响应它所需要的功能,今天我们就以电话拨号器的代码说明下几种点击事件: package com.itheima.phone; impo ...
- 17_点击事件第四种写法_布局文件添加onclick属性
尽量不要用第四种点击事件的写法.在一万多行代码中发现了一个没被调用的代码 public void call(View v){//第四种写法参数一定是View v //public void call( ...
- [Android] 点击事件的四种写法
点击事件的必备条件:实现OnClickListener接口,重写onclick(View v)方法 以拨号简单案例为例,如下图效果: 逻辑流程: 获取点击对象,获取数据 给对象设置监听类 实现OnCl ...
- android中点击事件的4种写法
android中获取到一些控件(比如说按钮)时,一般会为其添加点击事件,android中的点击事件一共有4中写法. 假设在布局文件中声明如下 ....... <Button android:la ...
- android点击事件的四种方式
android点击事件的四种方式 第一种方式:创建内部类实现点击事件 代码如下: package com.example.dail; import android.text.TextUtils; im ...
- 无废话Android之常见adb指令、电话拨号器、点击事件的4种写法、短信发送器、Android 中各种布局(1)
1.Android是什么 手机设备的软件栈,包括一个完整的操作系统.中间件.关键的应用程序,底层是linux内核,安全管理.内存管理.进程管理.电源管理.硬件驱动 2.Dalvik VM 和 JVM ...
- JAVA_SWT 事件的四种写法
一:匿名内部类写法 在一个组件下加入以下语句 text.addMouseListener(new MouseAdapter(){ public void mouseDoubleClich(MouseE ...
随机推荐
- jQuery中FormData的使用
web中数据提交事件是常常发生的,但是大多数情况下我们不希望使用html中的form表单提交,因为form表单提交会中断当前浏览器的操作并且会调到另一个地址(即使这个地址是当前页面),并且会重复加载一 ...
- 30_网络编程-socketserver
一.socketserver socketserver可以实现和多个客户端通信.它是在socket的基础上进行了一层封装,也就是说底层还是调用的socket,在py2.7里面叫做Socke ...
- 重识 PWA 进阶到 workbox3
看到PWA,似曾相识,但又感觉很模糊,于是乎,又重新翻阅文档,学习了一遍,顺便把相关知识学习了一下,比如service worker,workbox3. PWA 概念: 全称:Progressive ...
- D3.js的基础部分之数组的处理 数组的排序和求值(v3版本)
操作数组 D3提供了将数组洗牌.合并等操作,使用起来是很方便的. d3.shuffle(array,[,lo[,ji]]) : //随机排列数组. d3.merge(arrays) : / ...
- POJ 2405
#include <iostream> #include <cmath> #include <iomanip> #define pi 3.1415926536 us ...
- Git for Windows之日志查看与版本切换
1.查看本地版本库的修改日志 (1).通过log指令查看完整日志 (2).通过 log --pretty=oneline查看简易版日志 2.版本切换 (1).切换到本地版本库最新的版本,通过reset ...
- springboot + mybatis +druid
Druid Spring Boot Starter mybatis-spring-boot-autoconfigure mybatis-spring-boot-samples 新建spring boo ...
- 《Java多线程编程核心技术》——多线程与同步
Java多线程 线程可以理解为是在进程中独立运行的子任务. Java多线程 使用方法 Java中实现多线程主要有以下两种方法: 继承Thread,而后实例化该对象调用start()即启动了新线程; 实 ...
- golang内置数据类型作为函数参数
先上结论 golang的所有内置类型作为函数参数传递都是传值的方式(没有传递引用一说),需要注意的是:数组.slice和map作为函数参数时也是传值,但是如果对结构内元素进行的修改,修改的是原数据.如 ...
- myeclipse解决Fail to create the java Virtual Machine
今天在打开myeclipse的时候,就显示出 Fail to create the java Virtual Machine 这样的一个窗口出来. 解决的方案就是在myeclipse的安装目录下找到m ...