M应用程序将显示一个WebView
,但当我进入网站的其他部分(如cat.html
)然后点击时,它将关闭该应用程序,而不是返回至index.html
(首页)
因此,我想知道这将如何工作,例如如何在index.html
不关闭应用程序的情况下返回。
我的代码:
class HomeFragment : Fragment() {
private lateinit var homeViewModel: HomeViewModel
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
val v = inflater.inflate(R.layout.fragment_home, container, false)
val webview = v.findViewById<View>(R.id.webview) as WebView
webview.settings.javaScriptEnabled = true
webview.settings.setAppCacheEnabled(true)
webview.webViewClient = WebViewClient()
webview.loadUrl("file:///android_asset/newsfeed/index.html")
return v
}
}
您必须onBackPressed()
直接在Activity中(而不是在Fragment中)在方法内部处理这种情况。
您可以通过多种方式处理这种情况,例如通过:
直接使用Fragment对象
为此实现一些额外的接口
视图模型
WebView
直接在活动中使用您可以使用以下简单的方法:
override fun onBackPressed() {
if (webView.canGoBack()) {
// If possible - go back in WebView
webView.goBack()
} else {
// If NOT possible - just handle going back as always
super.onBackPressed()
}
}
webView
您的视图在XML布局文件(在onCreate()
方法中已充气)内在哪里。
WebView
Fragment的内部时,您必须:1)在您的Fragment中创建新方法
返回信息“是否可以在WebView中返回”。
“说”应该返回的WebView
我修复了一点Android流程(使用onCreateView
),并使用Kotlin Extension在WebView
class HomeFragment : Fragment() {
/**
* New method, allowing as to check "can we go back in WebView or not"
*/
fun webViewCanGoBack() = webview.canGoBack()
/**
* New method, saying WebView that should go back
*/
fun webViewGoBack() = webview.goBack()
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? = inflater.inflate(R.layout.fragment_home, container, false)
@SuppressLint("SetJavaScriptEnabled")
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
webview.run {
settings.run {
javaScriptEnabled = true
setAppCacheEnabled(true)
}
webViewClient = WebViewClient()
loadUrl("http://www.google.com")
}
}
}
2)onBackPressed()
在您的活动的方法内部使用新方法。
请记住,您是在存在该片段的实例时调用此方法的,因此您必须将其存储在某个位置:
override fun onBackPressed() {
if (homeFragment.webViewCanGoBack()) {
// If possible - go back in WebView
homeFragment.webViewGoBack()
} else {
// If NOT possible - just handle going back as always
super.onBackPressed()
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句