安卓代码优化(事件篇)

安卓代码优化(事件篇)

安卓的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 [email protected]
 * @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.0 AFragment AFragment AView AView setStwMvpView(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.0 AFragment AFragment BindPhone BindPhone BaseFragment BaseFragment fragment.startActivityForResult setResult(1) stwEvent(ActionType.BIND_PHONE, resultCode + "") fragment.startActivityForResult

总结

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

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

猜你喜欢

转载自blog.csdn.net/u011850446/article/details/71433900