最近总想静静地写点什么东西,肚子里又没什么墨水,写不出什么小说啊什么的,又想整理下自己以前写过的代码,学习到的干货,以前的这些东西都总结在印象笔记里,那我就把这些笔记都整理成博客好了,也希望各位大神们看到了能在评论里给我指出一些存在的问题,
前段时间碰到一个需求,一个界面上有很多标签种类,然后点击各自的标签,进入相同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);
}
轻松愉快,方便,就这样解决了。当然如果有更好更方便的方法,大神告诉我!!!