Android中,View的Listener方法,在是否使用匿名类匿名对象时,有各种不同的写法。

OnClickListener和其他Listener方法一样,都是View类的接口,重载实现后就能使用,其接口定义如下:

    public interface OnClickListener {        /**         * Called when a view has been clicked.         *         * @param v The view that was clicked.         */        void onClick(View v);    }
Android源码路径: framework/core/java/android/view/View.java(Android v2.2)


Listener在使用上有多种写法,了解这些,对编写程序好处比较有限,但对阅读代码却又是很有用的。大约也可以像孔乙已一样拿来炫耀吧,但我认为,这对初涉安卓编程的其他程序员来深入了解JAVA或者安卓编程,具有很重要的意义。

本例使用了六种方法,由于JAVA语法的灵活性,很可能换种思考,一种新的方法就诞生了,所以本文仅做了解,不要让他成为你的灵魂锁链,导致限制了你在安卓领域做更深入更广泛的探索和贡献。当然如果你发现的新的写法或者创造什么新的写法,也可以告诉我,大家一起学习。下面是程序代码:

1、main.xml

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="fill_parent"    android:layout_height="fill_parent"    android:orientation="vertical" >    <TextView        android:id="@+id/tvTitle"        android:layout_width="fill_parent"        android:layout_height="30dip"        android:layout_gravity="center"        android:gravity="center"        android:height="24dip"        android:textColor="#ff0000"        android:textSize="20sp"        android:text="显示点击Button"         android:focusable="true">        <requestFocus />    </TextView>    <Button        android:id="@+id/button1"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:text="Button1" />    <Button        android:id="@+id/button2"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:text="Button2" />    <Button        android:id="@+id/button3"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:text="Button3" />    <Button        android:id="@+id/button4"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:text="Button4"        android:onClick="Btn4OnClick" /> <!-- 绑定方法Btn4OnClick -->    <Button        android:id="@+id/button5"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:text="Button5" />    <Button        android:id="@+id/button6"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:text="Button6" /></LinearLayout>

2、Main.java

public class Main extends Activity implements OnClickListener {private Button m_button1, m_button2, m_button3, m_button4, m_button5, m_button6;public TextView tv;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);tv = (TextView) findViewById(R.id.tvTitle);m_button1 = (Button) findViewById(R.id.button1);m_button2 = (Button) findViewById(R.id.button2);m_button3 = (Button) findViewById(R.id.button3);//m_button4 = (Button) findViewById(R.id.button4);// xml绑定button,android:onClick="Btn4OnClick"m_button5 = (Button) findViewById(R.id.button5);m_button6 = (Button) findViewById(R.id.button6);/* * 方法1,参数this相当于new OnClickListener()对象, 即class Main 对象 * 用这种方式的话,public void onClick 方法必须写在该Main类中, 且Main类开头实现implements OnClickListener接口, 即this对象可以直接调用接口方法onClick() */m_button1.setOnClickListener(this);m_button2.setOnClickListener(clickListener);//方法2,使用对象clickListenerm_button3.setOnClickListener(new Button.OnClickListener() {//方法3,使用匿名对象创建监听,同方法2,可以看作另一种写法@Overridepublic void onClick(View v) {String strTmp = "点击Button03";tv.setText(strTmp);}});//方法4,使用XML文件创建时绑定方法Btn4OnClick,详见main.xmlm_button5.setOnClickListener(new clickListener2());//方法5,自己设计个监听类,监听的方法引用OnClickListener接口中的方法,创建的是匿名对象m_button6.setOnClickListener(new callOut(this));//方法6, 外部类实现事件监听器接口,很少用   ,详看文件callout.java}@Overridepublic void onClick(View v) {Log.i("log", "click");String strTmp = "点击Button01";tv.setText(strTmp);}public OnClickListener clickListener = new OnClickListener() {@Overridepublic void onClick(View v) {String strTmp = "点击Button02";tv.setText(strTmp);}};public void Btn4OnClick(View view) {String strTmp = "点击Button04";tv.setText(strTmp);}public class clickListener2 implements View.OnClickListener {@Overridepublic void onClick(View v) {String strTmp = "点击Button05";tv.setText(strTmp);}};}

3、callOut

public class callOut implements OnClickListener {private Main activity;public callOut(Activity activity) {this.activity = (Main) activity;}@Overridepublic void onClick(View v) {String strTmp = "点击Button06";activity.tv.setText(strTmp);}}


运行效果图:




源码下载


参考推荐:

Android四种监听方法

Android编程之Listener侦听的N种写法及实现原理

Interface与Abstract Class 抽象类和接口的使用区别

Java接口Interface与抽象类Abstract Class


更多相关文章

  1. 浅谈Java中Collections.sort对List排序的两种方法
  2. Python list sort方法的具体使用
  3. python list.sort()根据多个关键字排序的方法实现
  4. android上一些方法的区别和用法的注意事项
  5. android实现字体闪烁动画的方法
  6. Android中dispatchDraw分析
  7. Android四大基本组件介绍与生命周期
  8. Android(安卓)MediaPlayer 常用方法介绍
  9. 在Fragment中设置控件点击方法,执行失败。

随机推荐

  1. 三张图秒懂, 混淆, 中介, 调节, 对撞, 暴
  2. 学习HBase,你需要这样一本书
  3. hadoop本地模式
  4. HBase调优|HBase + G1GC 性能调优
  5. HBase服务|阿里云HBase推出普惠性高可用
  6. 前沿: 卫星数据在实证研究中的应用, 用其
  7. Spark Streaming 调优实践
  8. 拐点回归设计RKD概览, 及其开展实证研究
  9. HBase抗战总结|阿里巴巴HBase高可用8年抗
  10. 京东电商推荐系统实践