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

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

前段时间碰到一个需求,一个界面上有很多标签种类,然后点击各自的标签,进入相同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);
    }

轻松愉快,方便,就这样解决了。当然如果有更好更方便的方法,大神告诉我!!!

 

 

发布了31 篇原创文章 · 获赞 23 · 访问量 3万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览