首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android Activity 實現 OnClickListener 統一點擊處理

     編輯:程式設計綜合問答

問題

Activity 實現 View.OnClickListener 並重寫 onClick,但按鈕點擊無反應。

原因

**未將監聽器註冊到具體 View**。實現接口僅表示「我有處理能力」,必須顯式調用 button.setOnClickListener(this) 將具體按鈕與監聽器關聯。

修正代碼

public class MainActivity extends Activity implements View.OnClickListener {
    private Button btn;
    private TextView txt;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        init();
    }

    private void init() {
        btn = findViewById(R.id.button1);
        txt = findViewById(R.id.textView1);
        btn.setOnClickListener(this); // ★ 關鍵:註冊監聽器
    }

    @Override
    public void onClick(View v) {
        if (v.getId() == R.id.button1) {
            txt.setText("success!!");
        }
    }
}

進階:多按鈕統一處理模式

// 方式一:switch 判斷 ID
@Override public void onClick(View v) {
    switch (v.getId()) {
        case R.id.btn_save: save(); break;
        case R.id.btn_delete: delete(); break;
        case R.id.btn_query: query(); break;
    }
}

// 方式二:標記 Tag 區分業務類型
btnSave.setTag("SAVE");
btnDelete.setTag("DELETE");
@Override public void onClick(View v) {
    String action = (String) v.getTag();
    if ("SAVE".equals(action)) save();
    else if ("DELETE".equals(action)) delete();
}

// 方式三:Kotlin 擴展函數 / Lambda (推薦)
btnSave.setOnClickListener { save() }
btnDelete.setOnClickListener { delete() }

常見坑點

  • findViewById 返回 null → ID 拼寫錯誤或布局未正確 inflate。
  • 佈局中已設置 android:onClick="onClick" → 與代碼註冊衝突,二選一。
  • Fragment 中使用 → 需在 onViewCreated 註冊,且 v.getId() 需用 R.id.xxx。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved