无法从 webview 导航到其他片段

cant navigate to other fragment from webview

我正在尝试使用 navController 从 webview 导航到 fragment,但它似乎不起作用。

这是我的代码

 class LandingPageCreditCardFragment : Fragment(R.layout.fragment_landing_page_credit_card) {

private val binding by viewBinding(FragmentLandingPageCreditCardBinding::bind)
lateinit var navController: NavController

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)
    navController = view.findNavController()
    Log.i("link url", arguments?.getString("url").toString())
    showWebViewContent(requireArguments().getString("url")!!)
}

private fun showWebViewContent(url: String) {
    binding.webViewCreditCard.settings.javaScriptEnabled = true
    binding.webViewCreditCard.webViewClient = object : WebViewClient() {
        override fun shouldOverrideUrlLoading(view: WebView?, url: String?): Boolean {
            if (url != null) {
                view?.loadUrl(url)
            }
            return true
        }
    }
    binding.webViewCreditCard.addJavascriptInterface(object : Any() {
        @JavascriptInterface
        fun valid() {
            Toast.makeText(requireContext(), "test", Toast.LENGTH_SHORT).show()
            val builder = AlertDialog.Builder(requireContext())
            builder.setTitle("Konfirmasi")
            builder.setMessage("navigasi ke pesanan")
            builder.setPositiveButton("Ya") { dialog, which ->
                navController.navigate(R.id.action_landingPageCreditCardFragment_to_pesananFragment)
                dialog.dismiss()
            }
            builder.setNegativeButton("Tidak") { dialog, which ->
                dialog.dismiss()
            }
            builder.show()            }
    }, "btn")
    binding.webViewCreditCard.loadUrl(url)
} }

我参考这个 answer 来让我的功能正常工作

我试着吐司,它的工作 然后我尝试显示 alertDialog 包含按钮以从 webview 导航到下一个片段,当我单击它时,我的应用程序崩溃。

感谢任何帮助

经过多次调试,我找到了答案。

runOnUiThread 中调用包裹在 Thread 和 Handler

中的 navController
binding.webViewCreditCard.addJavascriptInterface(object : Any() {
        @JavascriptInterface
        fun valid() {
            val handler = Handler(Looper.getMainLooper())
            handler.post(Thread {
                (activity as MainActivity).runOnUiThread {
                    navController.navigate(R.id.action_landingPageCreditCardFragment_to_pesananFragment)
                }
            })
        }
    }, "btn")