Android實現Button按鈕點擊事件監聽的幾種方式


工作中的項目通常有多個人一起開發,而每個人都有每個人的代碼風格,不注重代碼規范通常是前人挖坑,后人采坑,降低項目開發效率及加大維護難度,這里分享幾種安卓按鈕點擊事件監聽的實現方式。

方式一直接在Activity中實現View.OnClickListener接口,重寫onClick方法,提供所有按鈕監聽事件入口。這是實際項目中最常用的方式,尤其在頁面有多個按鈕的情況下比較適用。

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) {
//處理邏輯
}
}

通常頁面會有多可按鈕,可以在OnClick方法中通過View.getId()獲取到發生點擊事件的按鈕Id,再進行相應的處理;建議不要直接在OnClick方法中直接處理,因為多個按鈕的處理邏輯寫在同一個方法中,方法體較長,可讀性降低。

方式二:按鈕注冊監聽器時直接實現監聽接口,即匿名內部類的方式實現。頁面只有單個按鈕時比較常用。

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;
}
//注冊
}
});


熟悉函數式編程的話,可直接寫lambda表達式,代碼更加簡潔。

方式三:自定義一個監聽器,實現View.OnClickListener接口,這與方式一類似,方式一直接在Activity中實現View.OnClickListener接口,因此它本身就是一個監聽器。這里要另外實現一個監聽器類。
class MyListener implements View.OnClickListener{

@Override
public void onClick(View view) {
//處理邏輯
}
}


最后別忘了在Activity中注冊自定義的監聽器
register_btn.setOnClickListener(new MyListener());


方式四:在XMl布局文件中的OnClick屬性直接注冊Activity中的處理方法,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);
}


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM