如何在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
相关产品推荐
相关产品推荐

