NavController未知导航目标xxx

时间:2019-09-28 12:25:25

标签: android kotlin

我有一个bottomSheetDialogFragment,它正在从HomeFragment(Navigationcontroller的一部分)打开。我希望在单击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()
        }
    }
}

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

可以提供您的导航图xml文件吗?问题是您试图使用与BottomSheetDialog关联的导航图xml文件中未定义的动作进行导航。尝试将findNavController().navigate()替换为requireView().findNavController().navigate(),看看是否可行。