当WebView URL在Kotlin中更改时,每次都需要使用URL更新文本视图
尝试制作一个简单的浏览器,并且无法设置将显示当前WebView URL的fild。尝试覆盖功能,但总是说“功能的名称”一无所有。还可以补充说WebView在片段中。也许我可以从Main Activity中称呼它,但是IDK如何。 WebView_fragment.kt
package com.example.webviewapp
import android.content.ContentValues.TAG
import android.graphics.Bitmap
import android.os.Bundle
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.webkit.WebView
import android.webkit.WebViewClient
import android.widget.TextView
import android.widget.Toast
import androidx.activity.OnBackPressedCallback
import androidx.fragment.app.Fragment
class webview_fragment : Fragment(){
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
val view : View = inflater.inflate(R.layout.layout_webview_fragment, container, false)
val mWebView : WebView = view.findViewById(R.id.webViewMain)
mWebView.loadUrl("https://google.com")
val webSettings = mWebView.getSettings()
webSettings.setJavaScriptEnabled(true)
mWebView.setWebViewClient(WebViewClient())
requireActivity()
.onBackPressedDispatcher
.addCallback(viewLifecycleOwner, object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
Log.d(TAG, "Fragment back pressed invoked")
if (mWebView.canGoBack()){
mWebView.goBack()
} else {
requireActivity().finishAndRemoveTask()
}
}
}
)
mWebView.webViewClient = object : WebViewClient(){
override fun onPageFinished(view: WebView?, url: String?) {
super.onPageFinished(view, url)
val urlText: TextView? = view?.findViewById(R.id.urlText)
val mWebView : WebView? = view?.findViewById(R.id.webViewMain)
urlText?.setText(mWebView?.getUrl())
}
}
return view
}
}
MainAttivity.kt
package com.example.webviewapp
import android.content.ContentValues.TAG
import android.content.Context
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
if (getSharedPreferences("app", Context.MODE_PRIVATE).getBoolean("Boolean", false) == false) {
supportFragmentManager
.beginTransaction()
.replace(R.id.fullcreen_holder, start_fragment())
.commit()
} else {
supportFragmentManager
.beginTransaction()
.replace(R.id.fullcreen_holder, webview_fragment())
.commit()
}
}
}
Trying make a simple browser, and can't set a fild that will showing current webview's url. Tried override functions, but always says that "name of function" overrides nothing. Also can add that webview is within fragment. Maybe i can call this from mainactivity, but idk how.
webview_fragment.kt
package com.example.webviewapp
import android.content.ContentValues.TAG
import android.graphics.Bitmap
import android.os.Bundle
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.webkit.WebView
import android.webkit.WebViewClient
import android.widget.TextView
import android.widget.Toast
import androidx.activity.OnBackPressedCallback
import androidx.fragment.app.Fragment
class webview_fragment : Fragment(){
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
val view : View = inflater.inflate(R.layout.layout_webview_fragment, container, false)
val mWebView : WebView = view.findViewById(R.id.webViewMain)
mWebView.loadUrl("https://google.com")
val webSettings = mWebView.getSettings()
webSettings.setJavaScriptEnabled(true)
mWebView.setWebViewClient(WebViewClient())
requireActivity()
.onBackPressedDispatcher
.addCallback(viewLifecycleOwner, object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
Log.d(TAG, "Fragment back pressed invoked")
if (mWebView.canGoBack()){
mWebView.goBack()
} else {
requireActivity().finishAndRemoveTask()
}
}
}
)
mWebView.webViewClient = object : WebViewClient(){
override fun onPageFinished(view: WebView?, url: String?) {
super.onPageFinished(view, url)
val urlText: TextView? = view?.findViewById(R.id.urlText)
val mWebView : WebView? = view?.findViewById(R.id.webViewMain)
urlText?.setText(mWebView?.getUrl())
}
}
return view
}
}
mainactivity.kt
package com.example.webviewapp
import android.content.ContentValues.TAG
import android.content.Context
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
if (getSharedPreferences("app", Context.MODE_PRIVATE).getBoolean("Boolean", false) == false) {
supportFragmentManager
.beginTransaction()
.replace(R.id.fullcreen_holder, start_fragment())
.commit()
} else {
supportFragmentManager
.beginTransaction()
.replace(R.id.fullcreen_holder, webview_fragment())
.commit()
}
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您只需从WebView即可获取Web URL,
。
在上面代码中代码中几乎没有任何问题 重命名替代fun onpageFined(查看:webview?,url:string?)以解决冲突的引用。
You can simply get the web url from the webView like this
There are few issues in your code
In the above code the textView you are trying to access it from the WebView's view instead from your fragment's view that's why you are facing the issue, you should rename the reference to the webView in override fun onPageFinished(view: WebView?, url: String?) to resolve the conflict.
您可以这样做,
每次移动到另一个网页时,它都会自动更新文本视图。
You can simply do it like this,
it will update the text view automatically every time you move to another web page.