首页 > 解决方案 > 此 NavController 不知道导航目的地 xxx

问题描述

我有一个从 HomeFragment(navigationcontroller 的一部分)打开的 bottomSheetDialogFragment。我希望通过点击 bottomSheetDialogFragment 内的按钮打开另一个目的地,但这样做会给我“此 NavigationController 未知的目的地”

HomeFragment.kt

override fun onClick(view: View?) {
        when (view) {
            binding.ivBacktrack -> {
                val upgradePremBottomSheet =
                    UpgradePremiumMembershipBottomSheetDialogFragment.newInstance()
                upgradePremBottomSheet.show(childFragmentManager, null)
            }
            binding.ivInterested -> displayToast()
            binding.ivNotInterested -> displayToast()
            binding.ivMessage -> {
                val directMessageBottomSheet = DirectMessageBottomDialogFragment.newInstance()
                directMessageBottomSheet.show(childFragmentManager, "Direct Message Bottom Sheet")
            }
        }
    }

DirectMessageBottomDialogFragment.kt

class DirectMessageBottomDialogFragment : BottomSheetDialogFragment(), View.OnClickListener {

    lateinit var binding: LayoutDirectMessageLimitReachedBottomSheetBinding

    companion object{
        fun newInstance(): DirectMessageBottomDialogFragment{
            return DirectMessageBottomDialogFragment()
        }
    }

    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        binding = LayoutDirectMessageLimitReachedBottomSheetBinding.inflate(inflater,container,false)
        binding.clDmLimitReachedBottomSheet.setBackgroundColor(ContextCompat.getColor(
            context!!, R.color.background_black
        ))
        return binding.root
    }

    override fun onStart() {
        super.onStart()
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        binding.tvGetPremiumMembership.setOnClickListener(this)
        binding.tvPurchaseDmPacks.setOnClickListener(this)
        binding.ivClose.setOnClickListener(this)
    }

    override fun onClick(v: View?) {
        when(v){
            binding.tvGetPremiumMembership -> findNavController().navigate(R.id.action_directMessageBottomDialogFragment_to_paymentFragment)
            binding.tvPurchaseDmPacks -> findNavController().navigate(R.id.action_directMessageBottomDialogFragment_to_dmPackFragment)
            binding.ivClose -> dismiss()
        }
    }
}

任何帮助表示赞赏

标签: androidkotlin

解决方案


你能提供你的导航图xml文件吗?问题是您正在尝试使用未在与您的 BottomSheetDialog 关联的导航图 xml 文件中定义的操作进行导航。尝试替换findNavController().navigate()requireView().findNavController().navigate()看看它是否有效。


推荐阅读