我想在对话框中显示我的网页内容。它可以是普通的Dialog() 或DialogFragment。我已经创建了布局:

1 2 3 4 5 6 7 8 9 10    

然后首先创建 Fragment 扩展 DialogFragment():

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 class ShowJob : DialogFragment(), View.OnClickListener {     var listPosition: Int? = 0     var offset: Int? = 0     lateinit var link: String     val TAG = ShowJob::class.java.simpleName!!     override fun onCreate(savedInstanceState: Bundle?) {         super.onCreate(savedInstanceState)         val bundle = arguments         offset = bundle!!.getInt("jobOffset")         link = bundle.getString("link")         listPosition = bundle.getInt("listPosition", 0)     }     override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {         val view = inflater.inflate(R.layout.show_job_scr,container,false)         val webView = view.findViewById(R.id.webView)         webView.loadUrl(link)         webView.webViewClient = HelloWebViewClient()         WebView.setWebContentsDebuggingEnabled(false)         return view     }     private inner class HelloWebViewClient : WebViewClient() {         override fun shouldOverrideUrlLoading(view: WebView, url: String): Boolean {             val intent = Intent(Intent.ACTION_VIEW, Uri.parse(url))             startActivity(intent)             return true         }     }     override fun onClick(p0: View?) {     } }

它不显示任何内容并将我重定向到 Chrome 等内置浏览器。然后我读到有时更改根布局类型的类型会有所帮助,并将我的 RelativeLayout 更改为 FrameLayout - 它没有帮助。然后我认为问题可能与所有布局有关,并在 textView 中放置了一些文本,它显示在我的片段中。第二个变体 - 我从我试图显示 DialogFragment:

的父片段中显示了 Dialog()

1 2 3 4 5 6 7 8 9 10 11 12 val webDialog = Dialog(context) webDialog.setContentView(R.layout.show_job_scr) webDialog.setCancelable(true) val webView = webDialog.findViewById(R.id.webView) !webView.isScrollbarFadingEnabled !webView.isHorizontalScrollBarEnabled webView.settings.javaScriptEnabled webView.clearCache(true) webView.loadUrl(url) webDialog.show()

它还将我重定向到内置浏览器。我的问题在哪里,我该如何解决?我看到了这个例子,这里开发人员设法在对话框中显示内容。我看到了很多示例,并且到处有人设法在对话框中显示 Web 内容,但我在重定向方面遇到了一些问题。

 相关讨论

你能在 shouldOverideUrlLoading 视图中添加这一行吗?.loadUrl(request?.url.toString())@AnasMehar,我必须在哪里添加这一行?我发布了我的解决方案,如果需要,您也可以查看它:)WebViewClient 回调方法 shouldOverrideUrlLoading 必须 args 第一个视图:WebView,第二个是请求:WebResourceRequest?所以你可以在回调方法中添加这条线 view?.loadUrl(request?.url.toString()) override fun shouldOverrideUrlLoading(view: WebView?, request: WebResourceRequest?): Boolean因为您实现了它以将所有内容重定向到默认浏览器。您的代码正是这样做的 - 重定向到默认浏览器。但现在我设法在我的 dialogFragment 中显示 webView,也许问题出在内部类上?

1 2 3 4 5 6 7 8 9 10 11 12  // this is the reason  webView.webViewClient = HelloWebViewClient()   private inner class HelloWebViewClient : WebViewClient() {     override fun shouldOverrideUrlLoading(view: WebView, url: String): Boolean     {         val intent = Intent(Intent.ACTION_VIEW, Uri.parse(url))         startActivity(intent)         return true     }   }

 相关讨论

所以我必须删除这个类,我会在 dialogFragment 中显示我的 webView?

我已经通过在这个问题上发布的解决方案解决了我的问题:

1 2 3 4 5 6  webView.webViewClient = object : WebViewClient() {             override fun shouldOverrideUrlLoading(view: WebView, url: String): Boolean {                 view.loadUrl(url)                 return false             }         }

我删除了内部类并在 onCreateView.

中添加了这些行

精彩内容

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。