方式一:
提供所有按钮监听事件入口,在OnClick方法中通过View.getId()获取到发生点击事件的按钮Id,再进行相应的处理, 在页面有多个按钮的情况下比较适用。
package com.example.myapp;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class MainActivity extends Activity implements View.OnClickListener {
private Button button1;
private Button button2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button1 = findViewById(R.id.button1);
button2 = findViewById(R.id.button2);
//注册监听器
button1.setOnClickListener(this);
button2.setOnClickListener(this);
}
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.button1:
onClickButton1(view);
break;
case R.id.button2:
onClickButton2(view);
break;
default:
break;
}
}
private void onClickButton1(View view) {
//处理逻辑
}
private void onClickButton2(View view) {
//处理逻辑
}
}
方式二:
按钮注册监听器时直接实现监听接口,即匿名内部类的方式实现。页面只有单个按钮时比较常用。
register_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(TextUtils.isEmpty(userName_et.getText().toString()) || TextUtils.isEmpty(pwd_et.getText().toString())) {
Toast.makeText(RegisterActivity.this, "用户名密码不能为空", Toast.LENGTH_LONG).show();
return;
}
//注册
}
});
方式三:
自定义一个监听器,实现View.OnClickListener接口.
class MyListener implements View.OnClickListener{
@Override
public void onClick(View view) {
//处理逻辑
}
}
//还要在Activity中注册自定义的监听器
register_btn.setOnClickListener(new MyListener());
方式四:
在XMl布局文件中的OnClick属性直接注册Activity中.需要使用public方法,底层会通过反射方式调用。
//XML布局文件:
<ImageButton
android:layout_marginTop="50dp"
android:layout_height="49dp"
android:layout_width="55dp"
android:layout_gravity="center"
android:onClick="activate"
/>
//Activity中写相应的处理方法,访问权限是public:
public void activate(View v) {
Intent intentToActivate = new Intent();
intentToActivate.setClass(this, LoginActivity.class);
startActivity(intentToActivate);
}
参考链接:原文地址