gpt4 book ai didi

android - 调用 goBack 后相关链接不起作用

转载 作者:太空狗 更新时间:2023-10-29 12:59:21 25 4
gpt4 key购买 nike

我创建了一个简单的应用程序来重现该问题。我有一个带有相关链接的 html 文件(带有 # 符号)。我正在将文件加载到 Android 的 WebView 中。但我只能通过链接访问一次。返回后,当我点击链接时没有任何反应。

重现步骤:

  • 打开页面
  • 点击链接 2
  • 按设备上的返回按钮
  • 点击链接 2 - 没有任何反应

来源如下:

常见问题解答.html

<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, target-densityDpi=medium-dpi">
<title>Title</title>
</head>
<body>
<h1>FAQ</h1>

<ul>
<li><a href="#Foo">Link 1</a></li>
<li><a href="#Bar">Link 2</a></li>
</ul>

<h1><a name="Foo">Link 1 body</a></h1>

<p>a very very very long text</p>

<h1><a name="Bar">Link 2 body</a></h1>

</body>
</html>

activity_webview.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/outer_background">

<WebView
android:id="@+id/webView"
android:layout_width="match_parent"
android:layout_height="match_parent"/>

</RelativeLayout>

常见问题解答.kt

class FaqActivity : AppCompatActivity() {

private lateinit var webView: WebView

@SuppressLint("NewApi")
override fun onCreate(args: Bundle?) {
super.onCreate(args)
setContentView(R.layout.activity_webview)
if (supportActionBar != null) {
supportActionBar!!.setDisplayHomeAsUpEnabled(true)
supportActionBar!!.setTitle(R.string.preference_about_faq)
}
webView = findViewById(R.id.webView)

val sb = StringBuilder()
try {
val inp = resources.openRawResource(R.raw.faq)
parseStream(inp, sb)
} catch (e: Resources.NotFoundException) {
}

webView.visibility = View.INVISIBLE
webView.settings.cacheMode = WebSettings.LOAD_NO_CACHE
webView.webViewClient = object : WebViewClient() {

override fun onPageFinished(view: WebView?, url: String?) {
super.onPageFinished(view, url)
// removes white screen blinking in the night mode
webView.visibility = View.VISIBLE
}

override fun shouldOverrideUrlLoading(view: WebView, url: String): Boolean {
return if (url.startsWith("http")) {
val uri = Uri.parse(url)
val intent = Intent(Intent.ACTION_VIEW, uri)
try {
startActivity(intent)
} catch (e: ActivityNotFoundException) {

}
true
} else {
false
}
}
}
webView.loadDataWithBaseURL(null, sb.toString(), "text/html", "UTF-8", null)
}

private fun parseStream(inputStream: InputStream, builder: StringBuilder) {
val NL = System.getProperty("line.separator")
val scanner = Scanner(inputStream, "UTF-8")
try {
while (scanner.hasNextLine()) {
builder.append(scanner.nextLine() + NL)
}
} finally {
scanner.close()
}
}

override fun onBackPressed() {
if (webView.canGoBack()) {
webView.goBack();
} else {
super.onBackPressed()
}
}

override fun onOptionsItemSelected(item: MenuItem): Boolean {
when (item.itemId) {
// Respond to the action bar's Up/Home button
android.R.id.home -> {
super.onBackPressed()
return true
}
}
return super.onOptionsItemSelected(item)
}
}

源是 Kotlin 文件,但我很确定它不会影响问题。

最佳答案

你可以在onBackPressed()函数中使用webView.pageUp(true),而不是webView.goBack() 这样当您单击设备上的后退按钮,它会滚动到顶部。

关于android - 调用 goBack 后相关链接不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57166138/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com