Android开发技巧:用Tag区分Click事件
2016-08-03 21:44
351 查看
Android开发中,经常用到Button控件,关于Button的Click事件的响应,有很多种方法,简单地说,可以归为两种,一种是在xml文件的Button标签中,添加android:onClick属性,另一种则是在代码中,通过Button的setOnClickListener方法来提供回调。本文探讨的是,当一个页面中含有多个Button的时候,如何更好地为这些Button提供click事件监听。
先说说在xml定义Button的Click事件监听的方法,示例如下:
XML中,为Button添加onClick属性:
相应的Activity中,添加一个方法即可:
这种方法只适合通过setContentView加载XML文件绘制界面的场合,如果通过代码动态创建视图,或者动态添加Button,则必须通过Button的 setOnClickListener 来添加响应代码了。
首先,创建 OnClickListener 的派生类:
然后,找出 Button 对象,添加该 onClickButtonListener 对象:
这样,即为该Button 添加了一个响应事件的类对象,当Click该Button后, onClickButtonListener 的 onClick 事件就会被调用。
那么,如果 XML 文件中有多个Button,比如ButtonA,ButtonB,ButtonC,该如何在 onClickButtonListener中区分响应呢?
这里提供三种思路:
(1) 为每一个Button派生一个OnClickListener子类
然后,分别set到各个Button中:
(2) 为 onClickButtonListener 添加一个标识类型的成员变量
然后,newonClickButtonListener的时候,填入 type
(3)使用 Button 的 setTag 方法
然后,在 new onClickButtonListener的时候,填入Tag对象:
注意,第三种方法在本应用中看起来貌似没有第二种方法方便,但是在许多复杂的应用中,第三种方法还是用得蛮多的,因为毕竟Tag是一个自定义的类,是可以容纳很多信息的,而第二种方法中,传递给 onClickButtonListener构造函数的参数,毕竟有限。
这篇文章就写到这里了,Android的每一个View类的子类,都有setTag 和 getTag 方法,利用好这个 Tag ,可以为设计带来很多方便,后面的文章中,我们还会涉及到 Tag的使用。
先说说在xml定义Button的Click事件监听的方法,示例如下:
XML中,为Button添加onClick属性:
<Button android:id="@+id/ButtonA" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="ButtonA" android:onClick="onClickButtonA"/>
相应的Activity中,添加一个方法即可:
public void onClickButtonA(View view) { }
这种方法只适合通过setContentView加载XML文件绘制界面的场合,如果通过代码动态创建视图,或者动态添加Button,则必须通过Button的 setOnClickListener 来添加响应代码了。
首先,创建 OnClickListener 的派生类:
public class onClickButtonListener implements OnClickListener { @Override public void onClick(View v) { } }
然后,找出 Button 对象,添加该 onClickButtonListener 对象:
Button buttonA = (Button)findViewById(R.id.ButtonB); buttonA.setOnClickListener(new onClickButtonListener());
这样,即为该Button 添加了一个响应事件的类对象,当Click该Button后, onClickButtonListener 的 onClick 事件就会被调用。
那么,如果 XML 文件中有多个Button,比如ButtonA,ButtonB,ButtonC,该如何在 onClickButtonListener中区分响应呢?
这里提供三种思路:
(1) 为每一个Button派生一个OnClickListener子类
public class onClickButtonAListener implements OnClickListener public class onClickButtonBListener implements OnClickListener public class onClickButtonCListener implements OnClickListener
然后,分别set到各个Button中:
buttonA.setOnClickListener(new onClickButtonAListener()); buttonB.setOnClickListener(new onClickButtonBListener()); buttonC.setOnClickListener(new onClickButtonCListener());
(2) 为 onClickButtonListener 添加一个标识类型的成员变量
public class onClickButtonListener implements OnClickListener { public static final int BUTTON_TYPE_A = 0; public static final int BUTTON_TYPE_B = 1; public static final int BUTTON_TYPE_C = 2; private final int mType; public onClickButtonListener( int type ) { mType = type; } @Override public void onClick(View v) { switch(mType) { case BUTTON_TYPE_A: break; case BUTTON_TYPE_B: break; case BUTTON_TYPE_C: break; } } }
然后,newonClickButtonListener的时候,填入 type
buttonA.setOnClickListener(new onClickButtonListener(onClickButtonListener.BUTTON_TYPE_A)); buttonB.setOnClickListener(new onClickButtonListener(onClickButtonListener.BUTTON_TYPE_B)); buttonC.setOnClickListener(new onClickButtonListener(onClickButtonListener.BUTTON_TYPE_C));
(3)使用 Button 的 setTag 方法
public class Tag { public static final int BUTTON_TYPE_A = 0; public static final int BUTTON_TYPE_B = 1; public static final int BUTTON_TYPE_C = 2; public final int mType; public Tag(int type) { mType = type; } } public class onClickButtonListener implements OnClickListener { @Override public void onClick(View v) { Tag type = (Tag)v.getTag(); switch(type.mType) { case Tag.BUTTON_TYPE_A: break; case Tag.BUTTON_TYPE_B: break; case Tag.BUTTON_TYPE_C: break; } } }
然后,在 new onClickButtonListener的时候,填入Tag对象:
buttonA.setTag(new Tag(Tag.BUTTON_TYPE_A)); buttonA.setOnClickListener(new onClickButtonListener()); buttonB.setTag(new Tag(Tag.BUTTON_TYPE_B)); buttonB.setOnClickListener(new onClickButtonListener()); buttonC.setTag(new Tag(Tag.BUTTON_TYPE_C)); buttonC.setOnClickListener(new onClickButtonListener());
注意,第三种方法在本应用中看起来貌似没有第二种方法方便,但是在许多复杂的应用中,第三种方法还是用得蛮多的,因为毕竟Tag是一个自定义的类,是可以容纳很多信息的,而第二种方法中,传递给 onClickButtonListener构造函数的参数,毕竟有限。
这篇文章就写到这里了,Android的每一个View类的子类,都有setTag 和 getTag 方法,利用好这个 Tag ,可以为设计带来很多方便,后面的文章中,我们还会涉及到 Tag的使用。
相关文章推荐
- Android开发技巧:用Tag区分Click事件
- [导入][导入][c#]Web开发中Tag的开发技巧
- Android 多媒体开发相关技巧
- Android开发之游戏中的常用技巧
- Android开发技巧:永不关闭的Toast信息框
- 技巧速查——分享我的Android程序开发心得
- [c#]asp.ent下开发中Tag的开发技巧
- Android 程序开发技巧 (网摘)
- iPhone开发技巧之环境篇(7)--- 区分不同版本的iPhone
- Android开发中常用技巧汇集
- Android本地化开发技巧
- Android 开发技巧杂集
- 分享4个Android开发技巧 布局相关
- 【转】Android开发之游戏中的常用技巧
- Android开发技巧 图片滚动效果实现
- Android中的XML解析-DOM的使用与开发技巧(转)
- Android开发技巧:像QQ一样输入表情图像
- android开发 常用技巧
- Android开发技巧:在TextView控件中单击链接弹出Activity
- Android 开发技巧之 手动拖动滚动条快速滑动