【Android】监听button点击事件
最近在看《第一行代码》学习Android,目前看到第三章。这本书可以说是手把手教学吧,里面的步骤和内容都非常详尽,对于一些需要开发中需要注意的过程也有所提及,可以说是一本不错的入门书籍。
但在阅读的过程中,经过案例都可以还原,我还是不能做到举一反三,很多知识点仍然处于模糊的状态,可能还是需要多次阅读再加上后面的学习才可以有更深刻的认识。
对于里面代码,其实很多的还不清楚是什么意思,大概是因为JAVA也掌握的不怎么好,今天刚了解到有关内部类的一些知识点,看到了一篇有关监听button点击事件的方法总结,转载如下,希望通过Android的学习也可以进一步巩固自己的JAVA知识。
1.Android开发-之监听button点击事件
http://www.cnblogs.com/xiao-chuan/p/6074075.html
一、实现button点击事件的方法
实现button点击事件的监听方法有很多,以下总结了常用的四种方法:
1. 匿名内部类
2. 外部类(独立类)
3. 实现OnClikckListener接口
4. 添加XML属性
每种方法都有其优缺点,那么接下来就详细讲解这四个实现方法
二、具体实现
匿名内部类:
在Andorid开发中我们经常都会看到各种匿名内部类的使用,那么在实现button点击事件的时候也可以用匿名内部类。
这样做的好处是:- 不需要重新写一个类,直接在new的时候去实现想实现的方法,方便。
- 当别的地方都用不到这个方法的时候使用匿名内部类
- 高内聚,高内聚是设计原则之一,匿名内部类的特性之一就是拥有高内聚。
但也有不足的地方:
- 当别的地方也需要同样的方法时还需要重新再写一次匿名内部类,容易使得代码冗余。
- 不方便后期的维护。
使用方法如下:
添加一个按钮
<Button android:"@+id/button1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="方法一:匿名内部类" />
回到MainActivity中实现
public class MainActivity extends Activity{ private Button btn1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); /* * 方法一:使用匿名内部类实现button按钮的 */ //绑定button按钮 btn1 = (Button) findViewById(R.id.button1); //监听button事件 btn1.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Toast tot = Toast.makeText( MainActivity.this, "匿名内部类实现button点击事件", Toast.LENGTH_LONG); tot.show(); } }); } }
独立类(外部类):
重新写一个独立的类来实现业务逻辑或是想要的效果。
这样写的好处是:- 一定情况下可以方便维护。
- 可以减少代码的冗余性,可以同时使用到多个地方。
不足的地方时: - 当只使用一次时浪费资源,程序的性能不高。
- 当有很多个方法时代码的可读性不高,此时不方便维护。
使用的方法如下:
- 添加一个button按钮
<Button android:"@+id/button2" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="方法二:独立类" />
- 回到MainActivity中实现,外部类需要实现OnClickListener接口,并重写其中的方法
public class MainActivity extends Activity { private Button btn2; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); /* * 方法二:独立类实现button实现 */ btn2 = (Button) findViewById(R.id.button2); btn2.setOnClickListener(new btn2Click(this)); } }
public class btn2Click implements OnClickListener { private Context context; //重载btn2Click方法 public btn2Click(Context ct){ this.context=ct; } @Override public void onClick(View v) { Toast tot = Toast.makeText( context, "独立类实现button点击事件", Toast.LENGTH_LONG); tot.show(); } }
实现OnClickListener接口:
与独立类实现的是原理是一样的,优点和缺点也是大径相同,实现OnClickListener接口当中的onClick方法。
使用方法如下:
- 添加一个Button按钮
<Button android:"@+id/button3" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="方法三:实现接口" />
- 回到MainActivity中实现
public class MainActivity extends Activity implements OnClickListener { private Button btn3; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); /* * 方法三:实现OnClickListener接口 */ btn3 = (Button) findViewById(R.id.button3); btn3.setOnClickListener(this); } //实现OnClickListener接口中的方法 @Override public void onClick(View v) { Toast tot = Toast.makeText( MainActivity.this, "接口OnClickListener实现button点击事件", Toast.LENGTH_LONG); tot.show(); } }
添加XML属性:
我们可以给XML添加一个onClick属性来实现点击事件的监控。
这样的好处是:更加便捷,代码量能够减少
但是不足的地方是:每一次维护的时候都要去XML里改源码,不好维护。
使用方法如下:
- 添加一个button按钮,并添加onClick按钮
<Button android:"@+id/button4" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="方法四:添加xml属性" android:onClick="btn4Click" />
- 回到MainActivity中实现onClick按钮
/* * 方法四:添加XML属性 */ public void btn4Click(View v){ Toast tot = Toast.makeText( MainActivity.this, "添加XML标签实现button点击事件", Toast.LENGTH_LONG); tot.show(); }
三、总结
在实现监听的时候都是需要两部走:
(1)绑定button按钮
(2)监听button按钮
具体使用什么方法实现它还是要看具体的需求,因为每个方法都有各自的好处和不足。如果只使用一次则推荐使用内部类的方法;日后多次使用则使用外部类的方法;实现接口的方法可以在原本的类中实现;但是XML里面添加属性的方法是不推荐的,毕竟不好维护。
内部类的使用在Android开发中经常用到,是非常重要的,需要好好掌握。
Android开发中涉及很多按钮,但是监听的方法常用的就这几种,要学会举一反三。