![](/img/trans.png)
[英]Pressing back button exits the app instead of navigating to the previous screen while using navigation component
[英]Pressing back button exits the app instead of navigating backwards in the WebView
我正在開發一個 WebView android 應用程序。 我無法修復我的應用程序中的問題以返回導航。 我正在使用此代碼並嘗試對此進行所有修改。
public class DeviceActivity extends Activity {
private WebView web;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_layout);
web = (WebView) findViewById(R.id.webView);
web.getSettings().setJavaScriptEnabled(true);
web.getSettings().setJavaScriptCanOpenWindowsAutomatically(false);
web.getSettings().setPluginsEnabled(false);
web.getSettings().setSupportMultipleWindows(false);
web.getSettings().setSupportZoom(false);
web.setVerticalScrollBarEnabled(false);
web.setHorizontalScrollBarEnabled(false);
// Our application's main page will be loaded
web.loadUrl("file:///android_asset/fbp/index.html");
web.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
return false;
}
public void onBackPressed() {
if (web.canGoBack()) {
web.goBack();
} else {
// My exit alert code goes here.
}
}
});
}
}
這不會返回,而是退出應用程序。 任何幫助,將不勝感激。
將此添加到您的Activity
代碼中(不在onCreate()
或嵌套在其他任何地方)
@Override
public void onBackPressed() {
if (web.copyBackForwardList().getCurrentIndex() > 0) {
web.goBack();
}
else {
// Your exit alert code, or alternatively line below to finish
super.onBackPressed(); // finishes activity
}
}
這將返回WebView
歷史堆棧,直到它為空,然后執行默認操作(在這種情況下,它完成了活動)。
您可能還應該將您的 WebViewClient 設置為讓shouldOverrideUrlLoading
返回true
否則您將不會加載任何鏈接。
在您的代碼中,您在 onCreate() 方法中保留了以下塊。
if (web.canGoBack()) {
web.goBack();
}
else {
//My exit alert code goes here.
}
而是像這樣在 onBackPressed() 中保留相同的代碼
@Override
public void onBackPressed() {
if(web.canGoBack()) {
web.goBack();
} else {
super.onBackPressed();
}
}
我們可以使用 webview 方法來向前和向后導航。 方法 boolean canGoForward()
for 獲取此 WebView 是否具有轉發歷史記錄項。 canGoBack()
for 獲取此 WebView 是否有歷史記錄項。 goBack()
在這個 WebView 的歷史中回溯, goForward()
在這個 WebView 的歷史中前進。 這是我的實現:
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.forward_btn:
if (mWebView.canGoForward()){
mWebView.goForward();
}else{
Toast.makeText(getApplicationContext(), "Tidak ada halaman lagi!", Toast.LENGTH_SHORT).show();
}
break;
case R.id.backward_btn:
if (mWebView.canGoBack()){
mWebView.goBack();
}else{
Toast.makeText(getApplicationContext(), "Tidak bisa kembali!", Toast.LENGTH_SHORT).show();
}
break;
case R.id.reload_btn:
layoutLoading.setVisibility(View.VISIBLE);
mWebView.reload();
break;
case R.id.back_btn:
onBackPressed();
break;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.