1.匿名内部类
2.创建一个类实现OnclickListener,setOnClickListener时传这个类的对象
3.让当前类直接实现OnclickListener,setOnClickListener时传this,一般开发采用该方式。
4.在布局文件中为控件配置一个Onclick属性,在布局对应的Activity中创建一个以属性值为名方法,切记public, 名字相同,传View;
一般公司开发不用,做简单测试时使用即可。
一、通过匿名内部类来实现,代码由电话拨号器项目改编:
btn_call.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v) {
EditText et_number = (EditText) findViewById(R.id.et_number);
String number = et_number.getText().toString().trim();
// 获取文本框的内容
if ("".equals(number)) {
// context 上下文 duration 显示土司的时长
Toast.makeText(MainActivity.this, "号码不能为空", Toast.LENGTH_LONG).show();
return;
}
Intent intent = new Intent(); // 创建意图对象
intent.setAction(Intent.ACTION_CALL);
intent.setData(Uri.parse("tel:" + number));
startActivity(intent);
}
});
二、通过内部类来实现
其实第二种方法跟第一种方法在本质上没有任何差别,虽然一个是匿名内部类另外一个是内部类,但是这只是写法上的差别,两者都是通过Button对象的setOnClickListener()方法来绑定实现的。
扫描二维码关注公众号,回复:
3128665 查看本文章
代码摘抄自电话拨号器项目:
定义一个内部类 目的实现 按钮监听
private class MyButtonListener implements OnClickListener {
@Override
public void onClick(View v) {
EditText et_number = (EditText) findViewById(R.id.et_number);
String number = et_number.getText().toString().trim();
// 获取文本框的内容
if ("".equals(number)) {
Toast.makeText(MainActivity.this, "号码不能为空", Toast.LENGTH_LONG).show();
return;
}
System.out.println("number--" + number);
Intent intent = new Intent();
// 创建意图对象
intent.setAction(Intent.ACTION_CALL);
intent.setData(Uri.parse("tel:" + number));
startActivity(intent);
}
}
三、由类文件去实现监听接口
代码如下:
//第一步:Activity实现OnClickListener接口
public class SecondActivity extends Activity implements OnClickListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
//第二步:得到button,并且设置点击监听为:this
Button btnCall = (Button) findViewById(R.id.btn_call);
btnCall.setOnClickListener(this);
}
//第三步:重写OnClickListener接口的onClick方法
@Override
public void onClick(View v) {
//根据v的id来区分点击的是哪个按钮
switch (v.getId()) {
case R.id.btn_call:
//DoSomething
break;
}
}
}
四、在布局文件中注册事件
1. 在布局文件中添加android:onClick 属性
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="点击我"
android:onClick="btnCall"/>
-
2. 在相应的java代码中定义call方法
该方法的形参必须为View对象,且只能有一个。修饰符必须是Public
public void btnCall(View view) {
Toast.makeText(getApplicationContext(),
"点击了我", Toast.LENGTH_SHORT).show();
}