此文档适合有一定java基础的人员学习
今天,我们用过一个案例来学习一下点击事件的处理,在这个案例(拨打电话)中,我讲介绍四种点击事件的处理。
在介绍点击事件处理之前,我们需要了解一下需求。首先拨打电话需要一个输入号码的地方,然后就是拨打按钮,界面布局我们可以这样:
其所对用的activity_mian.xml代码如下:
strings.xml(在项目的res/values下)代码如下:
CallPhone
Settings
Hello world!
拨打电话
请输入电话号码
好了,布局已经写好,下面我们就开始进行点击事件的处理了
1、 匿名内部类
匿名内部类就是说一个类(一般是接口)在另一个方法内部实现(我的理解,可能不对,请按照课本真实理解)
其代码如下:
package com.hackerant.callphone;
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 Button btCall;
private EditText etNum;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//获取对象
btCall = (Button) findViewById(R.id.bt_call);
etNum = (EditText) findViewById(R.id.et_phoneNum);
//设置点击事件
//点击事件相应方法一,匿名内部类
btCall.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
callPhone();
}
});
}
@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 callPhone()
{
String num = etNum.getText().toString().trim();
//如果输入电话号码为空
if (TextUtils.isEmpty(num))
{
Toast.makeText(getApplicationContext(), "请输入电话号码!", Toast.LENGTH_SHORT).show();
return ;
}
//Intent三步骤:创建-->设置action-->start
Intent intent = new Intent();
intent.setAction(Intent.ACTION_CALL);
intent.setData(Uri.parse("tel:" + num));
startActivity(intent);
}
}
OK,java代码已经完成,但如果你直接点击运行(Run As Android Application),你将看到如下错误(屏幕+logcat日志):
该错误是因为在Android中拨打电话可能产生费用,故而需要相应的权限,你需要在AndroidManifest.xml中写上拨打电话的权限,代码是:
其位置如下截图:
这时才是真正的完成了,其成功截图如下:
说明:由于我们已将打电话的业务代码给单独写出,所有在后面的事件中,我们只介绍关键代码
2、 重写OnClickListener
其核心代码如下:
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//获取对象
btCall = (Button) findViewById(R.id.bt_call);
etNum = (EditText) findViewById(R.id.et_phoneNum);
//设置点击事件
//点击事件相应方法而
btCall.setOnClickListener(new myOnclickListener());
}
/**
* 重写OnClickListener方法
* @author jun
*
*/
public class myOnclickListener implements OnClickListener {
@Override
public void onClick(View v)
{
callPhone();
}
}
其结果参考方法一
3、 让MainActivity继承OnClickListener
其核心代码如下:
package com.hackerant.callphone;
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 implements OnClickListener
{
private Button btCall;
private EditText etNum;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//获取对象
btCall = (Button) findViewById(R.id.bt_call);
etNum = (EditText) findViewById(R.id.et_phoneNum);
//设置点击事件
//点击事件相应方法三,该方法需要MainActivity继承OnclickListener,此方法最常用
btCall.setOnClickListener(this);
}
public void callPhone()
{
String num = etNum.getText().toString().trim();
if (TextUtils.isEmpty(num))
{
Toast.makeText(getApplicationContext(), "请输入电话号码!", Toast.LENGTH_SHORT).show();
return ;
}
Intent intent = new Intent();
intent.setAction(Intent.ACTION_CALL);
intent.setData(Uri.parse("tel:" + num));
startActivity(intent);
}
@Override
public void onClick(View v)
{
switch (v.getId())
{
case R.id.bt_call:
callPhone();
break;
default:
break;
}
}
}
其结果参考方法一
4、在布局文件中写onclick事件
在activity_main.xml中,改写button代码如下:
其onClick对应得便点击方法,该方法则不需要重写OnClickListener
特别介绍:
Toast.makeText(getApplicationContext(), "请输入电话号码!",Toast.LENGTH_SHORT).show();
Toast英文表示祝酒,但在此处表示弹出框,如上面截图中的“请输入电话号码!”便是。在Toast中,一定要有show()方法,因为只有show()才能show出来,否则只是创建一个Toast对象,并没有任何行为。
在makeText中,第一个参数表示上下文,一般我们能用到的是this,getApplicationContext()或**Activity.this,第二个参数是你需要弹出的内容,第三个参数是时长,可以为0 (Toast.LENGTH_SHORT)也可以为1(Toast.LENGTH_LONG)
恩,这一篇学习文档就先介绍到这,由于很多原因(主要是我懒)有些知识说的不是很清楚,欢迎前来询问,也希望大神们多多帮助!