美文网首页
抛弃onActivityResult,彻底改变startActi

抛弃onActivityResult,彻底改变startActi

作者: HurryYu_YZH | 来源:发表于2019-01-29 11:44 被阅读0次

    常规写法

    在Android开发中,我们经常需要启动另一个Activity并得到它返回的数据,常规的写法是这样的:

    private static final int REQUEST_CODE_BIND_INFO = 42;
    
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        ...
        Intent intent = new Intent(this, YourActivity.class);
        startActivityForResult(intent, REQUEST_CODE_BIND_INFO);
        ...
    }
    
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        switch (requestCode) {
            case REQUEST_CODE_BIND_INFO :
                if (resultCode == RESULT_OK) {
                    //做其它的事情
                }
                break;
            case XXX :
                if (resultCode == RESULT_OK) {
                    //做其它的事情
                }
                break;
        }
    }
    

    这样,当你的Activity需要启动多个Activity并需要得到结果时,先不说你必须要重写onActivityResult方法,并且其中的代码还需要你去判断对应的requestCode你区分是哪个Activity返回的结果,非常麻烦.

    我们需要改进

    因为上面这种常规写法的一系列不方便,因此我决定封装一个库,专门解决这个问题.因此BestActivityResult就诞生了

    BestActivityResult

    首先进行初始化:

    private BestActivityResult mBestActivityResult;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ...
        mBestActivityResult = new BestActivityResult(this);
        ...
    }
    

    在你需要启动另一个Activity的地方调用:

    mBestActivityResult.start(ResultActivity.class, (resultCode, data) -> {
        //在这里处理返回结果,不必关心requestCode
    })
    

    其中第一个参数就是你要启动的Activity,第二个参数是一个回调接口,当你启动的Activity退出时,此回调接口就会被回调.

    这样,就完全不必去重写onActivityResult了,使得我们开发更加方便.

    如果你觉得好用,欢迎给我star,如果你遇到了问题或是有更好的建议,欢迎给我Issues,谢谢!

    github传送门

    相关文章

      网友评论

          本文标题:抛弃onActivityResult,彻底改变startActi

          本文链接:https://www.haomeiwen.com/subject/klfxsqtx.html