返回

Android路由参数传递详解:手把手带你撸一个带参跳转

Android

路由参数的精髓:手把手带你玩转带参跳转

对于Android开发老兵而言,参数传递可谓是再熟悉不过的话题。从古老的startActivityForResult到现代化的Intent Extra,我们始终致力于在Activity之间高效地交换数据。今天,我们就来深入探讨Android原生的带参跳转,手把手教你撸一个实用的路由封装方案。

一、Intent Extra:参数传递的原生利器

Intent Extra是Android系统中用于Activity间参数传递的原生机制。它通过Intent对象携带各种类型的数据,包括基本类型(如int、String)、复杂类型(如Bundle、Parcelable)和序列化的对象。

具体使用方法也非常简单,使用putExtra方法添加参数,然后在目标Activity中通过getIntent()方法获取Intent对象,再通过getStringExtra()等方法获取具体参数值。

Intent intent = new Intent(this, TargetActivity.class);
intent.putExtra("name", "小明");
intent.putExtra("age", 20);
startActivity(intent);
Intent intent = getIntent();
String name = intent.getStringExtra("name");
int age = intent.getIntExtra("age", -1);

二、IntentWrapper:参数封装的简洁神器

原生Intent Extra虽然好用,但存在参数管理繁琐的问题。尤其是在参数较多时,代码容易变得杂乱无章。为了解决这一痛点,我们可以引入一个IntentWrapper类来对参数进行封装。

public class IntentWrapper {
    private Bundle bundle = new Bundle();

    public IntentWrapper withString(String key, String value) {
        bundle.putString(key, value);
        return this;
    }

    public IntentWrapper withInt(String key, int value) {
        bundle.putInt(key, value);
        return this;
    }

    public Bundle build() {
        return bundle;
    }
}

有了IntentWrapper,我们就可以轻松地将参数打包成一个Bundle对象。

IntentWrapper intentWrapper = new IntentWrapper();
intentWrapper.withString("name", "小明").withInt("age", 20);

Intent intent = new Intent(this, TargetActivity.class);
intent.putExtras(intentWrapper.build());
startActivity(intent);

三、实战:带参跳转的完整封装

为了进一步简化带参跳转,我们可以将IntentWrapper与原生Intent Extra结合起来,形成一个更加完整的封装方案。

首先,我们创建一个名为Router的工具类,其中包含跳转至指定Activity的方法。

public class Router {
    public static void navigateTo(Class<?> targetActivityClass, IntentWrapper intentWrapper) {
        Intent intent = new Intent(AppContext.getContext(), targetActivityClass);
        intent.putExtras(intentWrapper.build());
        AppContext.getContext().startActivity(intent);
    }
}

然后,我们就可以通过Router类轻松实现带参跳转。

Router.navigateTo(TargetActivity.class, new IntentWrapper().withString("name", "小明").withInt("age", 20));

至此,我们已经构建了一个既灵活又简洁的路由封装方案。不仅可以有效管理参数,还可以简化跳转流程,让我们的代码更加优雅。

SEO优化