有很多类似控件的时候点击事件的处理

来源:互联网 发布:联想e41指纹识别软件 编辑:程序博客网 时间:2024/04/27 20:21

最近总想静静地写点什么东西,肚子里又没什么墨水,写不出什么小说啊什么的,又想整理下自己以前写过的代码,学习到的干货,以前的这些东西都总结在印象笔记里,那我就把这些笔记都整理成博客好了,也希望各位大神们看到了能在评论里给我指出一些存在的问题,

前段时间碰到一个需求,一个界面上有很多标签种类,然后点击各自的标签,进入相同activity,activity里调用各自标签下的id的网络请求显示数据,见效果图。



对此,有一个问题就困扰到我了,如何做到,简单,清楚的写清楚这么多按钮的点击事件,一个一个setOnClickListener?显然不可能,因为我所有的点击事件里的内容都是基本完全一样的,除了一个intent传递给新的activity的标签ID不一样而已,而且之后标签的修改代码也不好维护。我也想到了自定义view,在自定义view里写清楚它的点击事件,然后我在自定义属性添加标签的text,代码里获取到text,然后进行判断标签对应的id是多少。这个操作性是可以的,但是代码很乱,而且,你判断标签的text还要写个枚举,麻烦而且性能上就比较影响了!

之后思考了半天,想到了通过tag的形式,标签对应的id正好就是tag,代码量少,而且扩展性强,就算标签变多或者减少修改都超级方便,首先感谢hongyang的流式布局,我通过流式布局在xml定义了多个textView,定义了样式与字体等。界面效果就已经出来了,之后就是点击事件的处理了。首先,我先在activity上初始化各个控件,进行findviewById处理。之后就是重点了:

        meibai.setTag(new RankingTag(RankingTag.BUTTON_TYPE_A));        meibai.setOnClickListener(this);        baoshi.setTag(new RankingTag(RankingTag.BUTTON_TYPE_B));        baoshi.setOnClickListener(this);        xiufu.setTag(new RankingTag(RankingTag.BUTTON_TYPE_C));        xiufu.setOnClickListener(this);        qujiaozhi.setTag(new RankingTag(RankingTag.BUTTON_TYPE_D));        qujiaozhi.setOnClickListener(this);        qudou.setTag(new RankingTag(RankingTag.BUTTON_TYPE_E));        qudou.setOnClickListener(this);//等等……


public class RankingTag {    public static final int BUTTON_TYPE_A = 1;    public static final int BUTTON_TYPE_B = 2;    public static final int BUTTON_TYPE_C = 3;    public static final int BUTTON_TYPE_D = 4;    public static final int BUTTON_TYPE_E = 5;    public static final int BUTTON_TYPE_F = 6;    public static final int BUTTON_TYPE_G = 7;    public static final int BUTTON_TYPE_H = 8;    public static final int BUTTON_TYPE_I = 9;    public static final int BUTTON_TYPE_J = 10;    //……等等    public final int mType;    public RankingTag(int type) {        mType = type;    }}
这样子处理以后在onClick事件里面就超级简单了:

@Override    public void onClick(View view) {        RankingTag type = (RankingTag)view.getTag();        effectId = type.mType;        Intent intent = new Intent(getActivity(), EffectRankingActivity.class);        intent.putExtra("effectId",effectId);        startActivity(intent);    }
轻松愉快,方便,就这样解决了。当然如果有更好更方便的方法,大神告诉我!!!


0 0
原创粉丝点击