分别如下:
一. 创建成员内部类
二. 创建匿名内部类
三. Activity直接实现监听器接口
四. 通过XML布局文件定义onClick属性
一. 创建成员内部类
MainActivity.java
package com.example.android.ui_button;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
/*
为按钮添加监听器
第一步:XML布局文件中添加BUtton控件,并设置id
第二步:在java代码中(需要显示该控件的Activity中),通过setContentView,
装载Button所在的XML布局。
第三步:通过BUtton的id在Activity中获取到Button的对象
第四步:为button按钮添加监听事件
a.创建内部类并实现OnClickListener接口
b.重写onClick()方法(当按钮被点击后,想要做的一些操作)
c.生成内部类对象
*/
private Button button01;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//第二步
setContentView(R.layout.activity_main);
//第三步
button01 = findViewById(R.id.btn01);
//生成监听器的对象
MyButtonListener myButtonListener = new MyButtonListener();
//为按钮添加监听器
button01.setOnClickListener(myButtonListener);
}
class MyButtonListener implements View.OnClickListener{
@Override
public void onClick(View view) {
//该方法将在绑定的按钮别点击时调用,v对象为绑定的控件
//吐司的使用方法:1.当前界面对象(上下文环境),2.显示内容,3.吐司显示时长
Toast.makeText(MainActivity.this,"按钮被点击啦!!",Toast.LENGTH_SHORT).show();
}
}
}
activity_main.xml
<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:text="Button"
android:textColor="@color/colorAccent"
android:background="@color/colorPrimaryDark"/>
LinearLayout>
二. 创建匿名内部类
SecondActivity.java
package com.example.android.ui_button;
import android.app.Activity;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
/**
* Created by JZHHZ on 2018/3/23.
* 第一步:获取Button对象
* 第二步:直接调用button的setOnClickListener方法
* a.在方法中,传入new OnClickListener(){
* onClick(){
*
* }
* }
* 匿名内部类和内部类形式,这两种形式在开发中最常用
*/
public class SecondActivity extends Activity {
private Button btn;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
btn = findViewById(R.id.btn01);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//当按钮点击时调用
Toast.makeText(SecondActivity.this,"按钮被点击了",Toast.LENGTH_LONG).show();
}
});
}
}
三. Activity直接实现监听器接口
ThirdActivity.java
package com.example.android.ui_button;
import android.app.Activity;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
/**
* Created by JZHHZ on 2018/3/23.
*/
public class ThirdActivity extends Activity implements View.OnClickListener{
private Button btn;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn = findViewById(R.id.btn01);
btn.setOnClickListener(this);
}
@Override
public void onClick(View view) {
//当按钮被点击时调用
Toast.makeText(this, "按钮被点击了啊", Toast.LENGTH_SHORT).show();
}
}
四. 通过XML布局文件定义onClick属性
Fourth.java
package com.example.android.ui_button;
import android.app.Activity;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
/**
* Created by JZHHZ on 2018/3/23.
* 第一步:xml布局文件中,为Button添加onClick属性
* 第二步:在对应的Activity中,创建一个以onClick属性值为名字的方法
* a.修饰符为public
* b.返回值为void
* c.传入参数为View类型
*/
public class Fourth extends Activity {
private Button btn;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn = findViewById(R.id.btn01);
}
public void myButtonClick(View view){
Toast.makeText(Fourth.this, "按钮被点击了呀", Toast.LENGTH_SHORT).show();
}
}
xml布局中Button:
为多个按钮添加监听器:
FifthActivity.java
public class ThirdActivity extends Activity{
/**
* 通过创建内部类为多个按钮添加监听器
* 创建内部类实现OnClickListener接口
* onClick方法中,通过Switch(R.id.xxx)方式区别当前被点击的按钮是哪个
* 之后再对相应的按钮做不通的处理
*/
private Button btn01,btn02;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn01 = findViewById(R.id.btn01);
btn02 = findViewById(R.id.btn02);
ButtonListener buttonListener= new ButtonListener();
btn01.setOnClickListener(buttonListener);
btn02.setOnClickListener(buttonListener);
}
class ButtonListener implements View.OnClickListener{
@Override
public void onClick(View view) {
switch (view.getId()){
case R.id.btn01:
Toast.makeText(FifthActivity.this, "按钮01被点击了呀", Toast.LENGTH_SHORT).show();
break;
case R.id.btn02:
Toast.makeText(FifthActivity.this, "按钮02被点击了呀", Toast.LENGTH_SHORT).show();
break;
}
}
}
}
xml布局文件,两个Button: