可以将事件写入一个外部类中,使得按钮触发自身事件时还会触发外部类中的事件,避免了有些按钮都要触发同一个事件时代码冗余。
package com.example.yellowsea.buttonclickevent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.support.v7.widget.ButtonBarLayout; import android.view.View; import android.widget.Button; import android.widget.Toast; public class MainActivity extends AppCompatActivity { private Button button1; private Button button2; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); button1 = (Button) findViewById(R.id.button1); button2 = (Button) findViewById(R.id.button2); //点击事件外部类 button1.setOnClickListener(new MyOnClickListener() { @Override public void onClick(View v) { //调用父类的onClick super.onClick(v); toast("触发按钮1"); } }); button2.setOnClickListener(new MyOnClickListener() { @Override public void onClick(View v) { //调用父类的onClick super.onClick(v); toast("触发按钮2"); } }); } public void toast(String message){ Toast.makeText(this, message, Toast.LENGTH_SHORT).show(); } } class MyOnClickListener implements View.OnClickListener { @Override public void onClick(View v) { //触发按钮时,都执行这个事件 v.setAlpha(0.5f); } }布局文件:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:orientation="vertical" tools:context="com.example.yellowsea.buttonclickevent.MainActivity"> <Button android:id="@+id/button1" android:text="@string/_1" android:layout_width="match_parent" android:layout_height="wrap_content" /> <Button android:id="@+id/button2" android:text="@string/_2" android:layout_width="match_parent" android:layout_height="wrap_content" /> </LinearLayout>