Android Studio中第三方交易SDK按结果跳转Fragment的实现方案
实现交易结果的条件式Fragment跳转方案
要实现交易状态对应的Fragment跳转,核心是在第三方交易SDK的回调中判断状态,再通过Navigation Component执行对应导航逻辑,结合你提供的代码,具体步骤如下:
1. 对接第三方SDK的交易结果回调
第三方交易SDK都会提供交易完成的回调接口(比如onTransactionFinished、onPaymentResult等,具体名称参考SDK文档),你需要在回调方法中获取交易的三种状态:
- 交易成功(对应状态码
"00") - 交易失败(非
"00"的错误状态码) - 用户主动取消交易(部分SDK会单独提供取消回调,需额外处理)
2. 根据状态执行导航逻辑
使用Navigation Component的NavController,根据不同状态跳转目标Fragment:
代码示例:交易回调中的导航逻辑
// 假设这是第三方SDK的交易结果回调方法 fun onTransactionResult(result: ThirdPartyTransactionResult) { val navController = findNavController() when { // 交易成功:跳转至结果Fragment并传递参数 result.status == "00" -> { // 用Safe Args构建跳转参数(推荐,避免手动getString的空指针问题) val action = TransactionHostFragmentDirections.actionToResultFragment( amount = result.amount, trace = result.traceId, rrn = result.rrn, status = result.status ) navController.navigate(action) } // 交易取消或失败:跳转至首个Fragment else -> { // 跳转时清空导航栈到首个Fragment,避免用户返回时回到交易流程页面 val navOptions = NavOptions.Builder() .setPopUpTo(R.id.first_fragment, inclusive = true) .build() navController.navigate(R.id.action_to_first_fragment, null, navOptions) } } }
3. 优化结果Fragment的参数获取逻辑
你提供的initView代码可以用Safe Args优化,替代直接从arguments中getString,避免空指针风险:
优化后的initView代码
fun initView() { binding.apply { button.setOnClickListener { findNavController().navigate(R.id.action_to_price_Enter_Fragment) } // 通过Safe Args安全获取参数(需先在导航图中定义参数) val args = ResultFragmentArgs.fromBundle(requireArguments()) val amount = args.amount val trace = args.trace val rrn = args.rrn val status = args.status val statusText = if (status == "00") "success" else "fail" tvResult.text = "transaction : $statusText" tvPrice.text = "$amount rial" tvTrackingCode.text = trace } }
注意事项
- 确保导航图(
nav_graph.xml)中已定义好对应跳转Action:从交易宿主Fragment到结果Fragment、到首个Fragment的跳转路径 - 部分SDK的取消交易会触发单独回调(如
onTransactionCanceled),需在该回调中执行和失败相同的导航逻辑 - 测试时覆盖所有场景:成功支付、支付失败、主动取消,验证导航栈的状态是否符合预期(比如失败后返回首页,再点返回键不会回到交易页)
内容的提问来源于stack exchange,提问作者Fatemeh Sarikhani
相关产品推荐
相关产品推荐

