安卓代码优化(事件篇)
安卓的Event控制器
第一次寫博客,练练手,写的不好,欢迎交流。
话不多说,直接干!
目录
Event控制器介绍
Event控制器,这个我自编的一个名字;因为我写不知道叫什么,随口叫了一个名字,不用纠结。统一处理事件的控制器。
类说明
Event类需要:
类名 | 介绍 |
---|---|
ActionType | 存放使用的功能号 |
StwMvpView | 程序的主接口,一般程序员都有的主接口 |
代码块
主接口,StwMvpView (命名随意):
public interface StwMvpView<M> extends HttpLifeCycleView {
/**
* 加了个前缀 stw 表明 不是eventBus的event
* @param tag 要传输的功能号
* @param json 要传输的数据
*/
void stwEvent(int tag, String json);
.....
}
/**
* @author jwkill@foxmail.com
* @Description :demo界面
* @date 20160411
*/
public class AFragment extends BaseFragment{
@Bind(R.id....)
AView aView; //当View 封装的使用
@Bind(R.id.angel_lelvel_up)
TextView bandPhone; //当跳转时候的使用
//这是eventBus 相比于eventBus个人感觉方便很多
@Override
public void onEventMainThread(Event event) {
super.onEventMainThread(event);
switch (event._id) {
case R.id.event_label_add:
case R.id.event_label_delete:
getPresenter().getLabels();
break;
}
}
@Override
protected void initView(View view) {
super.initView(view);=
//去绑定手机界面 回传结果
lelvel_up.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.setClass(mvpView.getContext(), BindPhone.class);
fragment.startActivityForResult(intent, ActionType.BIND_PHONE)
}
});
aView.setStwMvpView(this);
getPresenter().getLabels();
}
@Override
public void stwEvent(int tag, String json) {
switch (tag) {
case ActionType.DEFAULT:
AView事件过来啦,id就是Json!Json可以是任何东西。
break;
case ActionType.BIND_PHONE:
//可以在
if (BoolEnum.isTrue(json))
setNotice("绑定成功!");
else {
setNotice("绑定失败!");
}
break;
}
}
}
public class AView extends FrameLayout {
TextView clickView;
private void initView(Context context) {
View.inflate(context, R.layout.angel_store_top_view, this);
recommendTip = (TextView)findViewById(R.id.xxx);
recommendTip.setOnclicklistener{
stwMvpView.stwEvent(ActionType.DEFAULT, id);
};
}
public void setStwMvpView(StwMvpView stwMvpView) {
this.stwMvpView = stwMvpView;
}
public class BindPhone {
setResult(1);//1成功 0失败
finish();
}
public class BaseFragment imp.. StwMvpView{
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
case ActionType.BIND_PHONE:
stwEvent(ActionType.BIND_PHONE, resultCode + "");
break;
default:
super.onActivityResult(requestCode, resultCode, data);
break;
}
}
}
代码思路解析:
第二个例子
View封装使用:AFragment 想获取AView 的点击事件;常见的写法就是写一个回调AFragment 设置AView的回调,AView点击通过回调告诉AFragment。其实StwMvpView本质才不多就是这个,只想把这个回调去写进的你的主接口。可以少些很多代码 interface onclick、setOnclick、this.onclick.setOnclick等等。 简化了这个过程。
第一个例子流程图:
很简单吧
假设AFragment 要去绑定另一个界面绑定一个手机号。那么肯定是跳转,然后各种setResult等等。很多繁琐的代码。
假设使用基类接受对应功能号的返回值,把回调回来数据通过stwEvent告诉子类。可以简化这个操作流程。
当然有人会说 你这简化个毛线,流程更复杂了。
但是如果你有一个BFragment要绑定手机,那么只是两行代码:
1.StwActivityChangeUtil.toBindPhone( getMvpView());
2.case ActionType.BIND_PHONE:
setNotice("绑定成功!");
这时候就简单了。
特别是事情处理在统一的方法中进行了处理,方便管理;不是这里写一快,那里写一块。像我们这么专一 不朝三暮四的人肯定都是这样的对不对。下面附上图解
第二个例子流程图:
总结
这里的代码不是很方便复制 黏贴;主要还是提供一种思路。完全的代码复制是没有什么软用,师傅领进门、修行在这个人(当然我不是师傅,是刚写博客的渣渣);后面我会再发一些封装思路和实际开发需要用的设计思路。
开发比较忙,没有什么时间写博客。这个是挤事件写的,错别字很多,请见谅。
注意:转发请注明转帖链接**http://blog.csdn.net/u011850446/article/details/71433900。