startActivityForResult函数参数说明

startActivityForResult(Intent intent,int RequestCode)用于启动另一个activity并等待其返回的结果,毋庸置疑,intent用于启动目标activity,而RequestCode的作用是什么呢?
由于每个activity都可以启动任意的子activity并等待结果,而结果处理函数只有一个--onActivityResult(int requestCode, int resultCode, Intent intent),因此为了区别请求的事件,android将每个请求设定一个大于等于0的int值,这就是requestcode。例如,在同一个Acitivity中,有A、B两个按钮,点击这两个按钮进入不同的Activity,这两个按钮接收的返回值是不同的,所以,在点击A、B两个按钮时必须分别使用startActivityForResult(intent,RequestCodeA)、startActivityForResult(intent,RequestCodeB),由此,在onActivityResult函数中即可利用requestCode区别开不同的返回结果。
onActivityResult中的resultCode参数对应于子模块中setResut(int resultCode, Intent intent)函数中的resultCode值,用于区别不同的返回结果(如请求正常、请求异常等)。
对应流程:
母模块startActivityForResult--触发子模块,根据不同执行结果设定resucode值,最后执行setResut并返回到木模块--母模块触发onActivityResult,根据requestcode参数区分不同子模块
<think>好的,我现在需要帮助用户解决关于Android中公共跳转页面实现方法或最佳实践的问题。用户之前已经问过相关问题,现在需要更详细的指导。首先,我得回忆一下用户提到的引用内容,虽然引用中的例子是关于Activity跳转的基本方法,但用户现在想要的是公共跳转页面的通用方案,可能需要更结构化的设计。 首先,公共跳转页面通常是为了避免在各个Activity中重复编写跳转代码,所以应该考虑封装跳转逻辑。常见的做法是创建一个工具类,比如IntentUtil,里面封装生成Intent的方法。这样可以统一处理参数传递和跳转逻辑,减少代码冗余。同时,用户可能需要处理不同类型的跳转,比如普通跳转、带返回结果的跳转,甚至可能涉及Fragment之间的跳转,所以工具类需要覆盖这些情况。 另外,用户可能希望跳转时参数传递更方便,比如使用Bundle或者直接通过方法参数传递。这时候可以考虑使用高阶函数或扩展函数来简化参数设置。例如,Kotlin的扩展函数可以让代码更简洁,比如在Intent类上扩展一个put方法,链式调用添加参数。 接下来,路由框架也是一个重要的点。第三方库如ARouter可以帮助管理复杂的跳转逻辑,支持URL路由、参数自动注入、拦截器等功能。这对于大型项目尤其有用,能够解耦模块,方便动态配置。需要解释ARouter的基本用法,包括注解、初始化以及跳转示例。 然后,统一跳转协议可能也是用户需要的。通过定义自定义的URI Scheme,可以实现统一的跳转处理,比如从H5页面或推送消息跳转到特定Activity。这时候需要一个统一的Activity或IntentFilter来解析URI,并根据参数分发跳转。需要举例说明如何注册IntentFilter,以及如何解析参数。 另外,考虑用户提到的引用中关于onActivityResult和setResult的内容,可能需要说明在公共跳转方案中如何处理带返回结果的跳转,比如封装startActivityForResult的方法,并在工具类中处理回调。不过这部分可能比较复杂,特别是回调的管理,可能需要结合Activity Result API来简化。 还需要考虑安全性,比如防止其他应用调用内部的Activity,可以通过设置exported属性为false,或者在跳转时校验权限。此外,参数的类型安全也很重要,避免传递不支持的类型导致崩溃。 最后,总结最佳实践时,需要分点说明,从工具类封装到路由框架,再到统一协议,逐步提升方案的复杂度和适用场景。同时,要提供代码示例,比如Java和Kotlin的对比,特别是用户之前提到的Kotlin实现,可能需要展示如何用Kotlin扩展函数简化代码。 在生成相关问题的时候,需要围绕用户的问题扩展,比如如何传递复杂数据、路由框架的选择、如何处理回调、安全性等,这些都是用户可能进一步询问的方向。</think>### Android 公共跳转页面实现方案与最佳实践 #### 一、基础封装:工具类统一管理跳转逻辑 通过封装`IntentUtil`工具类实现跳转逻辑复用,支持**参数类型安全校验**和**多场景跳转**: ```java // Java 示例 public class IntentUtil { public static void startActivity(Context context, Class<?> target, Bundle bundle) { Intent intent = new Intent(context, target); if (bundle != null) { intent.putExtras(bundle); } context.startActivity(intent); } // 带回调的跳转 public static void startActivityForResult(Activity activity, Class<?> target, int requestCode) { Intent intent = new Intent(activity, target); activity.startActivityForResult(intent, requestCode); } } // Kotlin 扩展函数优化 fun Context.jumpTo(clazz: Class<*>, bundle: Bundle? = null) { Intent(this, clazz).apply { bundle?.let { putExtras(it) } startActivity(this) } } ``` #### 二、路由框架实现(推荐ARouter) 阿里巴巴开源路由框架**ARouter**可实现**模块解耦**与**动态路由**,支持: - 注解自动生成路由表 - 跨模块跳转 - 拦截器机制 - 参数自动注入 ```kotlin // 1. 初始化(Application中) ARouter.init(application) // 2. 声明路由路径 @Route(path = "/app/MainActivity") class MainActivity : AppCompatActivity() // 3. 发起跳转 ARouter.getInstance() .build("/app/DetailActivity") .withString("key", "value") .navigation() ``` #### 三、统一跳转协议设计 通过自定义URI Scheme实现**全平台统一跳转入口**,适配H5/推送/第三方调用场景: ```xml <!-- AndroidManifest.xml --> <activity android:name=".RouterActivity"> <intent-filter> <action android:name="android.intent.action.VIEW"/> <category android:name="android.intent.category.DEFAULT"/> <category android:name="android.intent.category.BROWSABLE"/> <data android:scheme="myapp" android:host="router"/> </intent-filter> </activity> ``` ```java // 路由分发逻辑 protected void onCreate(Bundle savedInstanceState) { Uri uri = getIntent().getData(); if(uri != null) { String path = uri.getQueryParameter("path"); switch(path) { case "detail": ARouter.getInstance().build("/app/DetailActivity").navigation(); break; // 其他路由分支 } } finish(); // 关闭路由页 } ``` #### 四、最佳实践建议 1. **安全性控制**: - 设置`android:exported="false"`限制外部调用 - 关键页面添加权限校验 ```xml <activity android:name=".PayActivity" android:exported="false" android:permission="com.example.PAY_PERMISSION"/> ``` 2. **参数传递规范**: - 使用`Parcelable`代替`Serializable`提升性能 - 复杂数据建议通过ViewModel共享 3. **跳转动画统一**: ```java // styles.xml 定义全局动画 <style name="ActivityAnimation"> <item name="android:windowEnterAnimation">@anim/slide_in_right</item> <item name="android:windowExitAnimation">@anim/slide_out_left</item> </style> ``` [^1]: 基础跳转实现参考Intent标准用法 [^2]: Kotlin扩展函数优化代码结构
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值