17_点击事件第四种写法_布局文件添加onclick属性
尽量不要用第四种点击事件的写法。在一万多行代码中发现了一个没被调用的代码
public void call(View v){//第四种写法参数一定是View v
//public void call(){
//在布局文件中button 声明属性onclick onclick起的名字 对应一个public void方法
//这个方法要在加载button的activity里实现 名字不能错 传入的参数必须View
String number = et_number.getText().toString().trim();
if(TextUtils.isEmpty(number)){
Toast.makeText(this, "输入不能为空", Toast.LENGTH_SHORT).show();
}else{
Intent intent = new Intent();
intent.setAction(Intent.ACTION_CALL);
intent.setData(Uri.parse("tel:"+number));
startActivity(intent);
}
}
想半天咋整。可能是点击事件,然后还要找对应的界面。如果界面又很复杂,那就难找了。
前面三种点击事件的写法都会用到,第四种点击事件的写法就不要用了。自己写demo用第四种没问题,具体跟别人配合开发的时候第四种点击事件的写法就不要用了。
第一种写法再改改,创建一个有名的对象。
package com.itheima.dailer; import android.net.Uri;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.text.TextUtils;
import android.view.Menu;
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 et_number; //Activity 代表了一个用户的界面. 每一个android的界面都对应一个activity
//activity可以创建一个窗口,在这个窗口上加载用户的界面(UI) 这个界面就是用来跟用户交互的
//Activity是安卓中最重要的API,
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//当activity创建的时候就会调用oncreate.在oncreate中做初始化的操作
// 首先调用setContentView()方法 加载界面 加载到内存 展示出来
setContentView(R.layout.activity_main);
et_number = (EditText) findViewById(R.id.editText1);
Button btn_call = (Button) findViewById(R.id.button1);
MyonClickListener listener = new MyonClickListener();
//给按钮添加点击事件
//btn_call.setOnClickListener(new MyonClickListener());//接收一个OnClickListener对象
btn_call.setOnClickListener(listener);
}
private class MyonClickListener implements OnClickListener { @Override
public void onClick(View v) {
int id = v.getId();
switch (key) {
case value: break; default:
break;
}
// TODO Auto-generated method stub
// 当控件被点击的时候就会调用这个onclick方法
// ① 获取用户的输入
String number = et_number.getText().toString();
// ② 判断用户输入是否为空
if(TextUtils.isEmpty(number)){//安卓提供的APITextUtils
// 如果为空 提示用户输入内容
//Toast.makeText 向界面输出一个短暂的提示
//第一个参数 上下文Context Activity就是一个上下文 可以传入当前activity对象
//第二个参数 要显示的提示文字
//第三个参数 显示提示的时间长度 Toast.LENGTH_SHORT(显示的时长较短) Toast.LENGTH_LONG(显示的时长较长)
//不要忘记要调用show()方法 显示这个Toast
Toast.makeText(MainActivity.this, "电话号码不能为空", Toast.LENGTH_SHORT).show();//duration 时长
System.out.println("用户输入是空的");
}else{
//如果不为空 用获取的电话号码 打电话
System.out.println("打电话:"+number);
//Intent 意图 就是对要进行的操作的抽象描述
Intent intent = new Intent();//创建一个意图对象
//给意图设置要操作的动作 ACTION_CALL
intent.setAction(Intent.ACTION_CALL);
//给意图设置要携带的数据
//URL 统一资源定位符 http:// ftp:// https:// abc://(访问不到,压根就没有abc这个协议),必须是已经规范好的协议
//uri 统一资源标示符 url 子类父类的关系 uri比URL多了一个特性 类似于XML和HTML的关系 uri可以自定义协议/自己声明一个协议
Uri data = Uri.parse("tel:"+number);//"tel:"就是咱们自定义的协议 不写tel:不能正确地把电话号码拿到
intent.setData(data);
//开启打电话的activity(打电话的界面)
startActivity(intent);
} } } @Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
} }
如果有多个按钮需要被点击,那么第一种写法和第三种写法都是可以的。如果是有一个按钮被点击,那么你写匿名内部类也没问题。究竟写哪种,第一种、第二种和第三种就根据自己的习惯来了。有可能很多公司都是习惯第三种写法,让当前的MainActivity来实现对应的点击事件。有的公司可能习惯于第二种写法,觉得更符合面向对象的思路。添加一个点击事件,然后这个点击事件传进一个对象。写switch会被认为是面向过程的思路。当然不同的公司习惯不一样,只要别用第四种写法就行。
<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"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" > <TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world" /> <EditText
android:id="@+id/editText1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/textView1"
android:layout_below="@+id/textView1"
android:layout_marginTop="14dp"
android:hint="在此输入电话"
android:ems="10" > <requestFocus />
</EditText> <Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/editText1"
android:layout_below="@+id/editText1"
android:layout_marginTop="18dp"
android:onClick="call"
android:text="拨打此号码" /> </RelativeLayout>
package com.itheima.fourthmathod; import android.net.Uri;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.text.TextUtils;
import android.view.Menu;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast; public class MainActivity extends Activity { private EditText et_number;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
et_number = (EditText) findViewById(R.id.editText1);
} @Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
//public void call1(View v){
public void call(View v){//第四种写法参数一定是View v
//public void call(){
//在布局文件中button 声明属性onclick onclick起的名字 对应一个public void方法
//这个方法要在加载button的activity里实现 名字不能错 传入的参数必须View
String number = et_number.getText().toString().trim();
if(TextUtils.isEmpty(number)){
Toast.makeText(this, "输入不能为空", Toast.LENGTH_SHORT).show();
}else{
Intent intent = new Intent();
intent.setAction(Intent.ACTION_CALL);
intent.setData(Uri.parse("tel:"+number));
startActivity(intent);
}
}
}
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.itheima.fourthmathod"
android:versionCode="1"
android:versionName="1.0" > <uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="17" />
<uses-permission android:name="android.permission.CALL_PHONE"/> <application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.itheima.fourthmathod.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application> </manifest>
17_点击事件第四种写法_布局文件添加onclick属性的更多相关文章
- Android笔记---点击事件的四种写法
Android 点击事件的四种写法: 1. 以内部类的形式实现 OnClickListener 接口.定义点击事件 class MainActivity extents Activity{ // .. ...
- Android中点击事件的四种写法详解
Android中点击事件的四种写法 使用内部类实现点击事件 使用匿名内部类实现点击事件 让MainActivity实现View.OnClickListener接口 通过布局文件中控件的属性 第一种方法 ...
- [Android] 点击事件的四种写法
点击事件的必备条件:实现OnClickListener接口,重写onclick(View v)方法 以拨号简单案例为例,如下图效果: 逻辑流程: 获取点击对象,获取数据 给对象设置监听类 实现OnCl ...
- [Android]Java中点击事件的四种写法
点击事件的必备条件:实现OnClickListener接口,重写onclick(View v)方法 以拨号简单案例为例,如下图效果: 逻辑流程: 获取点击对象,获取数据 给对象设置监听类 实现OnCl ...
- 无废话Android之常见adb指令、电话拨号器、点击事件的4种写法、短信发送器、Android 中各种布局(1)
1.Android是什么 手机设备的软件栈,包括一个完整的操作系统.中间件.关键的应用程序,底层是linux内核,安全管理.内存管理.进程管理.电源管理.硬件驱动 2.Dalvik VM 和 JVM ...
- Android journey3 @点击事件的4种写法
对于android布局中的控件,如Button等会有相应的点击事件去响应它所需要的功能,今天我们就以电话拨号器的代码说明下几种点击事件: package com.itheima.phone; impo ...
- android点击事件的四种方式
android点击事件的四种方式 第一种方式:创建内部类实现点击事件 代码如下: package com.example.dail; import android.text.TextUtils; im ...
- (转)Ext.Button点击事件的三种写法
转自:http://maidini.blog.163.com/blog/static/377627042008111061844345/ ExtJs的写法太灵活了,现在收集了关于Button点击事件的 ...
- JAVA_SWT 事件的四种写法
一:匿名内部类写法 在一个组件下加入以下语句 text.addMouseListener(new MouseAdapter(){ public void mouseDoubleClich(MouseE ...
随机推荐
- rails数据验证
@user1 = :name => "zhou" 与 @user2 = :name=> "ZHOU" 在为保存之前都有可能通过第一关validate ...
- 在Nginx中做负载均衡配置的实例讲解
负载均衡是我们大流量网站要做的一个东西,下面我来给大家介绍在Nginx服务器上进行负载均衡配置方法. 先来简单了解一下什么是负载均衡,单从字面上的意思来理解就可以解释N台服务器平均分担负载,不会因为某 ...
- Data Structure Binary Search Tree: Find k-th smallest element in BST (Order Statistics in BST)
http://www.geeksforgeeks.org/find-k-th-smallest-element-in-bst-order-statistics-in-bst/ #include < ...
- Python 运算符(算术运算符(+,-,*,**,/,//),逻辑运算符(not , or ,and),比较运算符(>,<,>=,=<),复合运算符(+=,-=,*=,/=,**=,//=))
# 一.算术运算符(+,-,*,**, /, //, %) # 加法运算符+ print(1 + 2) # 字符串相连 ") # 重载 print([1,2] + [3,4]) # 幂运算* ...
- Logstash的插件
Logstash的插件: input插件: File:从指定的文件中读取事件流: 使用FileWatch(Ruby Gem库)监听文件的变化. .sincedb:记录了每个被监听的文件的inode, ...
- SSAS——基础
一.Analysis Services Analysis Services是用于决策支持和BI解决方案的数据引擎.它提供报表和客户端中使用的分析数据. 它可在多用途数据模型中创建高性能查询结构,业务逻 ...
- python自动化开发学习 I/O多路复用
python自动化开发学习 I/O多路复用 一. 简介 socketserver在内部是由I/O多路复用,多线程和多进程,实现了并发通信.IO多路复用的系统消耗很小. IO多路复用底层就是监听so ...
- C++11特性 gcc源码包
1.下载gcc最新的源码包 2.解压缩 tar -xf gcc-4.9.1.tar.gz 3. cd gcc-4.9.1 4.运行download_prerequisites脚本, ./contri ...
- json 文件解析与应用
第一步:首先弄一个 json 文件 我这里成为 config.json 内容如下 { ": { , "desc":"中华人民共和国" }, &qu ...
- NO3:步履蹒跚-完成第一章节学习
第一章小记: 每个C程序都要求有一个main()函数(多于一个main()函数是不合法的(已犯错:在VS 2010一个项目里两个C文件都有main函数,不能编译通过,必须删除一个文件,永记)).mai ...