安卓代码优化(事件篇)

来源:互联网 发布:小灰狼打印软件注册码 编辑:程序博客网 时间:2024/06/05 15:11

安卓代码优化(事件篇)

安卓的Event控制器

第一次寫博客,练练手,写的不好,欢迎交流。
话不多说,直接干!


目录

  • 安卓的Event控制器
      • 目录
    • 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等等。 简化了这个过程。

第一个例子流程图:

Created with Raphaël 2.1.0AFragmentAFragmentAViewAViewsetStwMvpView(this)!stwMvpView.stwEvent(ActionType.DEFAULT, id)

很简单吧
假设AFragment 要去绑定另一个界面绑定一个手机号。那么肯定是跳转,然后各种setResult等等。很多繁琐的代码。
假设使用基类接受对应功能号的返回值,把回调回来数据通过stwEvent告诉子类。可以简化这个操作流程。
当然有人会说 你这简化个毛线,流程更复杂了。
但是如果你有一个BFragment要绑定手机,那么只是两行代码:

 1.StwActivityChangeUtil.toBindPhone( getMvpView()); 2.case ActionType.BIND_PHONE:     setNotice("绑定成功!");

这时候就简单了。
特别是事情处理在统一的方法中进行了处理,方便管理;不是这里写一快,那里写一块。像我们这么专一 不朝三暮四的人肯定都是这样的对不对。下面附上图解

第二个例子流程图:

Created with Raphaël 2.1.0AFragmentAFragmentBindPhoneBindPhoneBaseFragmentBaseFragmentfragment.startActivityForResultsetResult(1)stwEvent(ActionType.BIND_PHONE, resultCode + "")fragment.startActivityForResult

总结

这里的代码不是很方便复制 黏贴;主要还是提供一种思路。完全的代码复制是没有什么软用,师傅领进门、修行在这个人(当然我不是师傅,是刚写博客的渣渣);后面我会再发一些封装思路和实际开发需要用的设计思路。
开发比较忙,没有什么时间写博客。这个是挤事件写的,错别字很多,请见谅。

注意:转发请注明转帖链接**http://blog.csdn.net/u011850446/article/details/71433900。

0 0
原创粉丝点击