方式1:创建成员内部类
//1:创建内部类
class ButtonListener implements OnCickListener{
//重写OnClick方法
@Override
public void onClick(View v){
// 该方法将在绑定的按钮被点击时调用,v对象为绑定的控件
// 吐司使用方法:1,当前界面对象(上下文环境),2,显示内容,3、吐司显示时长
Toast.makeText(MainActivity.this, "按钮被点击啦!!", Toast.LENGTH_SHORT).show();
}
}
/*
* 为按钮添加监听器 第一步:XML布局文件中添加<Button />控件并为其设置id
* 第二步:在java代码中(需要显示该控件的Activity中), 通过setContentView,装载Button所在的XML布局。
* 第三步:通过Button的id在Activity中获取到Button的对象
* 第四步:为button按钮添加监听事件
* a:创建内部类并实现OnClickListener接口
* b:重写onClick方法(当按钮被点击后想干什么)
* c:生成内部类对象
* d:为按钮添加监听器
*/
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 第二步
setContentView(R.layout.activity_linearlayout);
// 第三步
button01 = (Button) findViewById(R.id.btn01);
//生成监听器(内部类)类的对象
MyButtonListener myButtonListener=new MyButtonListener();
//第四步 为按钮添加监听器
button01.setOnClickListener(myButtonListener);
}
方式2:创建匿名内部类
/*
* 第一步:获取Button对象
* 第二步:直接调用button的setOnClickListener方法
* a,在方法中,传入new OnClickListener(){
* onClick(){
* }
* }
* 匿名内部类以及内部类形式,这两种方式在开发中最常用。
*/
private Button btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_linearlayout);
btn = (Button) findViewById(R.id.btn01);
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// 当按钮点击时调用
Toast.makeText(SecondActivity.this, "按钮已被点击(匿名内部类)",
Toast.LENGTH_LONG).show();
}
});
}
方式3:Activity直接实现监听接口
public class ThirdActivity extends Activity implements OnClickListener {
/*
* 第一步:获取到Button按钮对象
* 第二步 : 直接使Activity实现OnClickListener接口
* 第三步:重写onClick方法
* 第四步:为按钮添加监听器(传入this)
*/
private Button btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_linearlayout);
btn = (Button) findViewById(R.id.btn01);
btn.setOnClickListener(this);
}
@Override
public void onClick(View v) {
// 当按钮被点击时调用
Toast.makeText(ThirdActivity.this, "按钮已被点击(Activity直接实现接口)",
Toast.LENGTH_LONG).show();
}
}
方式4:通过XML布局文件定义onClick属性
/*
* 第一步:xml布局文件中,为button添加onclick属性
* 第二步:在对应的Activity中,创建一个以onclick属性值为名字的方法
* a:修饰符为public
* b:返回值为void
* c:传入参数为View类型
*/
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_linearlayout);
}
public void MyButtonClick(View v) {
// 将在btn01按钮被点击时调用
Toast.makeText(FourthActivity.this, "按钮已被点击(xml布局文件中定义)", Toast.LENGTH_LONG)
.show();
}
activity_linearlayout.xml文件:
<Button
android:id="@+id/btn01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@color/blue"
android:onClick="MyButtonClick"
android:text="按钮1"
android:textColor="@color/cyan"
android:layout_marginBottom="5dp"/>
附加:多按钮使用用一个监听器
public class SixthActivity extends Activity {
// 通过创建内部类为多个按钮添加监听器
/*
* 创建内部类实现OnClickListener接口
* onClick方法中,通过switch(R.id.xxx)方式区别当前被点击的按钮是哪个
* 之后再对相应的按钮做不同的处理
*/
private Button btn01, btn02;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_linearlayout);
btn01 = (Button) findViewById(R.id.btn01);
btn02 = (Button) findViewById(R.id.btn02);
ButtonsListener btnButtonsListener = new ButtonsListener();
btn01.setOnClickListener(btnButtonsListener);
btn02.setOnClickListener(btnButtonsListener);
}
class ButtonsListener implements OnClickListener {
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn01:
Toast.makeText(SixthActivity.this, "已点击第一个按钮",
Toast.LENGTH_LONG).show();
break;
case R.id.btn02:
Toast.makeText(SixthActivity.this, "已点击第二个按钮",
Toast.LENGTH_LONG).show();
break;
}
}
}
}
activity_linearlayout.xml文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<Button
android:id="@+id/btn01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@color/blue"
android:onClick="MyButtonClick"
android:text="按钮1"
android:textColor="@color/cyan"
android:layout_marginBottom="5dp"/>
<Button
android:id="@+id/btn02"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@color/blue"
android:text="按钮2"
android:textColor="@color/cyan" />
</LinearLayout>