layout:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_on_click" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.iamchan.allfunction.ui.widget.OnClickActivity"> <LinearLayout android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:id="@+id/text" android:padding="10dp" android:gravity="center" android:layout_width="match_parent" android:layout_height="wrap_content" /> <Button android:text="btn1" android:id="@+id/btn1" android:layout_width="match_parent" android:layout_height="wrap_content" /> <Button android:text="btn2" android:id="@+id/btn2" android:layout_width="match_parent" android:layout_height="wrap_content" /> <Button android:text="btn3" android:id="@+id/btn3" android:layout_width="match_parent" android:layout_height="wrap_content" /> <Button android:text="btn4" android:id="@+id/btn4" android:layout_width="match_parent" android:layout_height="wrap_content" /> </LinearLayout> </RelativeLayout>
java:
public class OnClickActivity extends SwipeBackActivity implements View.OnClickListener { @BindView(R.id.btn1) Button btn1; @BindView(R.id.btn2) Button btn2; @BindView(R.id.text) TextView text; @BindView(R.id.btn3) Button btn3; @BindView(R.id.btn4) Button btn4; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_on_click); ButterKnife.bind(this); /* * 监听事件 * * 生活中按了一下电灯开关 开关内部执行了某些操作 比如让灯灭(灯亮) 灯灭(灯亮)了就属于给了你一个响应 然后你就睡觉或者睡醒了 * * * */ /* * 这是匿名内部类方式实现监听(放在方法的内部) * button是继承于view对象的 *view对象中有一个方法叫做setOnClickListener()方法 参数需要传一个OnClickListener接口 *接口中有一个方法叫做 onClick * 接口没有方法体 * * */ btn1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { text.setText("这是匿名内部类方式"); } }); /* * * 通过外部类实现 * */ btn2.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { super.onClick(v); Toast.makeText(OnClickActivity.this/*内部类访问不了本类对象*/, "这个外部类实现", Toast.LENGTH_SHORT).show(); } }); btn3.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { super.onClick(v); Toast.makeText(OnClickActivity.this/*内部类访问不了本类对象*/, "这个外部类实现2", Toast.LENGTH_SHORT).show(); } }); /* * 通过接口方式 * 需要让这个activity实现 view中的OnClickListener接口 * * */ btn4.setOnClickListener(this); } /* * 接口方式实现 * */ @Override public void onClick(View v) { switch (v.getId()){ case R.id.btn4: text.setText("这是接口方式实现"); break; } } } /* * 外部类方式实现 用的比较少 继承个接口 view对象中的OnClickListener接口 * * 这种方法一般用在一个页面中的很多按钮点击实现一个功能 比如一个动画效果 * * */ class OnClickListener implements View.OnClickListener { @Override public void onClick(View v) { v.setAlpha(0.7f); } } /* * 对比 * 匿名内部类方式 少量按钮实现监听 * 外部类 多个按钮实现相同工能 * 接口方式 很多个按钮的时候(不要都给每个按钮用匿名内部类方式) * * */