registerForActivityResult 封装基类

仔细看源码,可以发现回调顺序遵循的是FILO,用双端列队保存回调监听即可:

open class BaseActivity : AppCompatActivity() {
    private val resultCallBacks: Deque<ResultCallBack> = ArrayDeque()
    private val activityForResult =
        registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
            resultCallBacks.pop()?.let {
                it(result.resultCode, result.data?: Intent())
            }
        }

    @JvmOverloads
    protected fun startForActivityResult(
        cls: Class<*>,
        block: Intent.() -> Unit = {},
        callBack: ResultCallBack
    ) {
        resultCallBacks.push(callBack)
        activityForResult.launch(Intent(this, cls).apply(block))
    }

}

使用:

        startForActivityResult(CActivity::class.java, {
            putExtra("data1", "data")
        }) { resultCode, data ->
           
        }

猜你喜欢

转载自blog.csdn.net/jingzz1/article/details/110236804
今日推荐