Giter VIP home page Giter VIP logo

activitymessenger's Introduction

ActivityMessenger,借助Kotlin特性,简化Activity之间传参和回调的逻辑代码。

唠叨:

在日常开发中,每次使用startActivityForResult时,要做的事情都超级多:

  1. 定义一个RequestCode

  2. 重写onActivityResult并在这里判断RequestCodeResultCode

  3. 如果有携带参数,还要一个个通过putExtra方法putIntent里;

  4. 目标Activity处理完成后还要把数据一个个putIntent中,setResult然后finish

  5. 如果参数是可序列化的泛型类对象(如ArrayList<Model>),取出来的时候不但要显式强制转型,还要把 UNCHECKED_CAST 警告抑制;


在饱受这些繁琐折磨之后,便诞生出了ActivityMessenger

它有以下特点:

  1. startActivityForResult不用另外定义RequestCode

  2. 跟其他库一样,startActivityForResult不用重写onActivityResult方法,也不用判断RequestCodeResultCode

  3. startActivity如有携带参数不须一个个调用putExtra方法;

  4. Intent中取出数据时,无须调用对应类型的方法,如getStringExtra()getIntExtra()getSerializableExtra()等;

  5. 如果参数是可序列化的泛型类对象(如ArrayList<Model>),取出来的时候不用强制转型,也没有可怕的 UNCHECKED_CAST 警告了;


示例:

startActivity:

方式1(假设TestActivity是要启动的Activity):

    //不携带参数
    startActivity<TestActivity>()
    
    //携带参数(可连续多个键值对)
    startActivity<TestActivity>("Key" to "Value")

方式2(假设TestActivity是要启动的Activity):

    //不携带参数
    startActivity(TestActivity::class)
    
    //携带参数(可连续多个键值对)
    startActivity(
        TestActivity::class,
        "Key1" to "Value",
        "Key2" to 123
    )

startActivityForResult:

方式1(假设TestActivity是要启动的Activity):

    //不携带参数
    startActivityForResult<TestActivity> {
        if (it == null) {
            //未成功处理,即(ResultCode != RESULT_OK)
        } else {
            //处理成功,这里可以操作返回的intent
        }
    }
    
    //携带参数同startActivity。

方式2(假设TestActivity是要启动的Activity):

    //不携带参数
    startActivityForResult(TestActivity::class) {
        if (it == null) {
            //未成功处理,即(ResultCode != RESULT_OK)
        } else {
            //处理成功,这里可以操作返回的intent
        }
    }
    
    //携带参数同startActivity。    

finish:

    //退出并设置参数
    finish("Key1" to "Value1", "Key2" to 2)

getExtras(获取Intent参数):

方式1

    //预先声明好类型
    var mData: List<String>? = null
    mData = intent.get("Key1")

方式2

    //取出时再决定类型
    val result = intent.get<String>("Key2")

方式3

    // 使用委托
    val key3 by extraAct("key3", "test")
    var key4: String? by extraAct("key4")

toIntent:

    val action = "android.media.action.IMAGE_CAPTURE"
    val intent = action.toIntent()

使用方式:

添加依赖:

implementation 'com.wuyr:activitymessenger:1.2.0'

感谢:

activitymessenger's People

Contributors

wangzailfm avatar wuyr avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.