Activity Result API 扩展,解决before

2022-03-21  本文已影响0人  幻雪之恋_0414

官方已明确标记startActivityForResult()@deprecated,并给出@link指定使用registerForActivityResult,即Activity Result API,下面我们来看一张图:

截图

在这个大环境下,想必很多人也会把新项目或者升级老项目使用Activity Result API,如果还未使用或者想使用的人可以先了解一下Activity Result API的基础使用,但是使用的人知道存在以下几个问题:

基于以上问题,本文给出了解决方案

API特色

如何使用

step 1.在根目录的build.gradle添加:

allprojects {
   repositories {
      ...
      maven { url "https://jitpack.io" }
   }
}

step 2.然后在 build.gradle(Module:XXX) 的 dependencies 添加:

当前最新版本:

image
dependencies {
        implementation 'com.github.ChinaLike:ActivityResultApi:最新版本号'
        //根据自己版本选择即可,最低不能低于activity-ktx:1.2.3、fragment-ktx:1.3.4
        implementation("androidx.activity:activity-ktx:1.2.3")
        implementation("androidx.fragment:fragment-ktx:1.3.4")
        //ARouter,根据自己需要引入,版本按照自己需要引入
        //implementation 'com.alibaba:arouter-api:1.5.2'
        //kapt 'com.alibaba:arouter-compiler:1.5.2'
}

step 3.在项目自定义Application中添加或在已经有的自定义ApplicationonCreate()中添加:

class BaseApplication:Application() {

    override fun onCreate() {
        super.onCreate()
        ...
        ActivityResultApi.init(this)
        ...
    }
}

并在AndroidManifest.xml中添加

    <application
        ...
        android:name=".BaseApplication"
        ...>
            ...
    </application>

API介绍

registerForActivityResult(intent,activityResultCallback)

参数说明

Kotlin示例

val intent = Intent(this, SecondActivity::class.java)
intent.putExtra(Key.SOURCE, source)
registerForActivityResult(intent) {
   //回调
}
val intent = Intent(this, SecondActivity::class.java)
intent.putExtra(Key.SOURCE, source)
registerForActivityResult(intent)
//startActivity(intent) 也一样

Java示例

Intent intent = new Intent(this, SecondActivity.class);
intent.putExtra(Key.SOURCE, source);
ActivityResultApiExKt.registerForActivityResult(this, intent, result -> 
      //回调
);
Intent intent = new Intent(this, SecondActivity.class);
intent.putExtra(Key.SOURCE, source);
ActivityResultApiExKt.registerForActivityResult(this, intent);

<T:FragmentActivity> registerForActivityResult(intentExtra,activityResultCallback)

参数说明

Kotlin示例

registerForActivityResult<SecondActivity> {
   //回调
}
registerForActivityResult<SecondActivity>({
   it.putExtra(Key.SOURCE, source)
}) {
   //回调
}
registerForActivityResult<SecondActivity>({
   it.putExtra(Key.SOURCE, source)
})
registerForActivityResult<SecondActivity>()

ARouter中,navigation(context,navigationCallback,activityResultCallback)

参数说明

Kotlin示例

ARouter.getInstance()
    .build(Router.SECOND_ACTIVITY)
    .withString(Key.SOURCE, source)
    .navigation(this, object : NavigationCallback {

        override fun onFound(postcard: Postcard?) {
            
        }

        override fun onLost(postcard: Postcard?) {

        }

        override fun onArrival(postcard: Postcard?) {

        }

        override fun onInterrupt(postcard: Postcard?) {

        }

    }) {
   //回调
    }
ARouter.getInstance()
    .build(Router.SECOND_ACTIVITY)
    .withString(Key.SOURCE, source)
    .navigation(this) {
   //回调
    }

Java示例

Postcard postcard = ARouter.getInstance()
    .build(Router.SECOND_ACTIVITY)
    .withString(Key.SOURCE, source);
ActivityResultApiExKt.navigation(postcard, this, new NavigationCallback() {
    @Override
    public void onFound(Postcard postcard) {
        
    }

    @Override
    public void onLost(Postcard postcard) {

    }

    @Override
    public void onArrival(Postcard postcard) {

    }

    @Override
    public void onInterrupt(Postcard postcard) {

    }
}, new ActivityResultCallback<ActivityResult>() {

    @Override
    public void onActivityResult(ActivityResult result) {
        //回调
    }
});
Postcard postcard = ARouter.getInstance()
        .build(Router.SECOND_ACTIVITY)
        .withString(Key.SOURCE, source);
ActivityResultApiExKt.navigation(postcard, this, new ActivityResultCallback<ActivityResult>() {

    @Override
    public void onActivityResult(ActivityResult result) {
        //回调
    }
});

如有问题欢迎留言源码地址

上一篇 下一篇

猜你喜欢

热点阅读