Android 我的部分应用程序仅在我';我正在恢复我的应用程序(onResume)
当我的应用程序最初启动时,不是在所有设备上,而是在不同的android版本+emulator上,webview和我的工具栏标题将仅为白色(文本设置正确,webview的URL加载正确)。当我刚刚恢复/关闭应用程序时(不要完全关闭,只是恢复),我的应用程序工作正常。调试时未检测到任何有用的内容,因为一切似乎都正常工作 一个问题是我的工具栏的标题。它设置正确,但在我恢复应用程序之前不会显示 (标题为“社区”) 在恢复之前,我的WebView也不会显示Android 我的部分应用程序仅在我';我正在恢复我的应用程序(onResume),android,android-webview,onresume,activity-lifecycle,Android,Android Webview,Onresume,Activity Lifecycle,当我的应用程序最初启动时,不是在所有设备上,而是在不同的android版本+emulator上,webview和我的工具栏标题将仅为白色(文本设置正确,webview的URL加载正确)。当我刚刚恢复/关闭应用程序时(不要完全关闭,只是恢复),我的应用程序工作正常。调试时未检测到任何有用的内容,因为一切似乎都正常工作 一个问题是我的工具栏的标题。它设置正确,但在我恢复应用程序之前不会显示 (标题为“社区”) 在恢复之前,我的WebView也不会显示 private fun initWebViews
private fun initWebViews() {
for (webView in webViewArray) {
webView.settings.run {
javaScriptEnabled = true
domStorageEnabled = true
allowFileAccess = true
allowContentAccess = true
}
webView.addJavascriptInterface(JavaScriptBridge(this), "Android")
(webView.parent as SwipeRefreshLayout).setOnRefreshListener {
webView.clearCache(true)
webView.loadUrl("about:blank")
webView.reload()
webView.loadUrl(webView.url)
}
webView.webViewClient = object : WebViewClient() {
override fun onPageStarted(view: WebView?, url: String?, favicon: Bitmap?) {
//super.onPageStarted(view, url, favicon)
webView.tag = "started"
webViewsInitialized += 1
if (!NetworkHandler.hasActiveInternetConnection(applicationContext)) {
include_no_connection.visibility = View.VISIBLE
}
if (view == getCurrentWebView()) {
showLoading()
url?.let { handleToolbarTitle(viewanimator_main.displayedChild, it) }
}
// desc: Wenn beim Logout die logoutpage aufgerufen wird dann den weiteren logout prozess initieren
if (url!!.contains("logout.php")) {
isLoggedOut = true
initiateLogout()
}
}
override fun onPageFinished(view: WebView?, url: String) {
//super.onPageFinished(view, url)
webView.tag = "finished"
view?.scrollTo(0, 0)
if (view == getCurrentWebView()) {
hideLoading()
(view.parent as SwipeRefreshLayout).isRefreshing = false
if (include_no_connection.visibility == View.VISIBLE && NetworkHandler.hasActiveInternetConnection(applicationContext)) {
include_no_connection.visibility = View.GONE
}
}
webView.evaluateJavascript(JS_CUSTOMER_ID_CHANGED) {}
webView.evaluateJavascript(JS_NOTIFICATIONS) {}
Log.d(TAG, "PageFinished " + view?.url);
}
override fun shouldOverrideUrlLoading(view: WebView?, request: WebResourceRequest?): Boolean {
super.shouldOverrideUrlLoading(view, request)
val currentUrl = request?.url.toString()
// desc: Externe Links werden im Browser geöffnet
if (!currentUrl.contains(DTW)) {
view?.context?.startActivity(Intent(ACTION_VIEW, Uri.parse(currentUrl)))
return true
}
// desc: Wenn die angesteuerte url für einen anderen tab bestimmt ist wird diese umgeleitet
val mappedResult = MappingUtil.mapTargetUrl(currentUrl, viewanimator_main.displayedChild)
if (viewanimator_main.displayedChild != mappedResult && webView != webview_community && webViewArray[mappedResult].url != currentUrl) {
selectNavItem(mappedResult, false)
webViewArray[mappedResult].loadUrl(currentUrl)
showLoading()
return true
}
return false
}
}
可能是比赛条件问题。除非我们看到一些代码,否则我们无法确定!我真的不知道我的代码的哪一部分是问题。虽然调试一切都很好,但我很难判断哪些代码片段是有用的。但我试过了。工具栏问题可能来自Manifest.xml的双重检查,在这里您定义了该活动的样式,并确保它不是
NoActionBar
。否则,必须在layout.xml中添加工具栏
private fun initWebViews() {
for (webView in webViewArray) {
webView.settings.run {
javaScriptEnabled = true
domStorageEnabled = true
allowFileAccess = true
allowContentAccess = true
}
webView.addJavascriptInterface(JavaScriptBridge(this), "Android")
(webView.parent as SwipeRefreshLayout).setOnRefreshListener {
webView.clearCache(true)
webView.loadUrl("about:blank")
webView.reload()
webView.loadUrl(webView.url)
}
webView.webViewClient = object : WebViewClient() {
override fun onPageStarted(view: WebView?, url: String?, favicon: Bitmap?) {
//super.onPageStarted(view, url, favicon)
webView.tag = "started"
webViewsInitialized += 1
if (!NetworkHandler.hasActiveInternetConnection(applicationContext)) {
include_no_connection.visibility = View.VISIBLE
}
if (view == getCurrentWebView()) {
showLoading()
url?.let { handleToolbarTitle(viewanimator_main.displayedChild, it) }
}
// desc: Wenn beim Logout die logoutpage aufgerufen wird dann den weiteren logout prozess initieren
if (url!!.contains("logout.php")) {
isLoggedOut = true
initiateLogout()
}
}
override fun onPageFinished(view: WebView?, url: String) {
//super.onPageFinished(view, url)
webView.tag = "finished"
view?.scrollTo(0, 0)
if (view == getCurrentWebView()) {
hideLoading()
(view.parent as SwipeRefreshLayout).isRefreshing = false
if (include_no_connection.visibility == View.VISIBLE && NetworkHandler.hasActiveInternetConnection(applicationContext)) {
include_no_connection.visibility = View.GONE
}
}
webView.evaluateJavascript(JS_CUSTOMER_ID_CHANGED) {}
webView.evaluateJavascript(JS_NOTIFICATIONS) {}
Log.d(TAG, "PageFinished " + view?.url);
}
override fun shouldOverrideUrlLoading(view: WebView?, request: WebResourceRequest?): Boolean {
super.shouldOverrideUrlLoading(view, request)
val currentUrl = request?.url.toString()
// desc: Externe Links werden im Browser geöffnet
if (!currentUrl.contains(DTW)) {
view?.context?.startActivity(Intent(ACTION_VIEW, Uri.parse(currentUrl)))
return true
}
// desc: Wenn die angesteuerte url für einen anderen tab bestimmt ist wird diese umgeleitet
val mappedResult = MappingUtil.mapTargetUrl(currentUrl, viewanimator_main.displayedChild)
if (viewanimator_main.displayedChild != mappedResult && webView != webview_community && webViewArray[mappedResult].url != currentUrl) {
selectNavItem(mappedResult, false)
webViewArray[mappedResult].loadUrl(currentUrl)
showLoading()
return true
}
return false
}
}