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

如何在Android Navigation Component中区分同一Fragment的多个实例?

解决方案

你需要通过导航回调的arguments参数获取当前MultipleChoiceFragment实例的questionId——导航图中的Destination是模板定义,同一个id对应同一套配置,无法直接从destination对象拿到实例级的参数。具体实现如下:

在SurveyFragment中修改监听逻辑:

navController.addOnDestinationChangedListener { _, destination, arguments ->
    // 先判断当前页面是否是MultipleChoiceFragment
    if (destination.id == R.id.multipleChoiceFragment) {
        // 从arguments中取出questionId(导航图已配置非空,正常跳转必有值)
        val currentQuestionId = arguments?.getString("questionId")
        currentQuestionId?.let { questionId ->
            when (questionId) {
                "question_001" -> {
                    // 执行问题001对应的操作
                }
                "question_002" -> {
                    // 执行问题002对应的操作
                }
                // 添加更多问题分支
            }
        }
    }
}

补充说明

每次通过action跳转时,你传入的questionId会被封装到arguments中传递给新的MultipleChoiceFragment实例,OnDestinationChangedListener的第三个参数就是当前页面的参数集合,直接从中提取即可区分不同实例。

虽然导航图已标记questionId为非空,正常流程下arguments中必然存在该值,但代码中保留空安全处理是为了应对异常跳转场景。

内容的提问来源于stack exchange,提问作者corporate_fun

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 03:15:44