You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 18:52:35