Как вернуться на предыдущую страницу, если кнопка Назад нажата в WebView?
у меня есть приложение, в котором у меня есть WebView
где я показываю некоторые веб-сайты. Это работает, нажав на ссылку на веб-странице переходит на следующую страницу на веб-сайте внутри моего приложения. Но когда я нажимаю кнопку "Назад" телефона, он берет меня прямо в мое приложение. Вместо этого я хочу вернуться на предыдущую страницу на веб-сайте. Как я могу это сделать?
вот пример кода, который я использую:
public class Webdisplay extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
this.getWindow().requestFeature(Window.FEATURE_PROGRESS);
setContentView(R.layout.webdisplay);
getWindow().setFeatureInt(Window.FEATURE_PROGRESS,
Window.PROGRESS_VISIBILITY_ON);
Toast loadingmess = Toast.makeText(this,
"Cargando El Diario de Hoy", Toast.LENGTH_SHORT);
loadingmess.show();
WebView myWebView;
myWebView = (WebView) findViewById(R.id.webview);
myWebView.getSettings().setJavaScriptEnabled(true);
myWebView.loadUrl("http://www.elsalvador.com");
myWebView.setWebViewClient(new WebViewClient());
myWebView.setInitialScale(1);
myWebView.getSettings().setBuiltInZoomControls(true);
myWebView.getSettings().setUseWideViewPort(true);
final Activity MyActivity = this;
myWebView.setWebChromeClient(new WebChromeClient()
{
public void onProgressChanged(WebView view, int progress)
{
MyActivity.setTitle("Loading...");
MyActivity.setProgress(progress * 100);
if(progress == 100)
MyActivity.setTitle(R.string.app_name);
}
});
}
}
10 ответов:
я использую что-то вроде этого в моей деятельности с этого:
@Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (event.getAction() == KeyEvent.ACTION_DOWN) { switch (keyCode) { case KeyEvent.KEYCODE_BACK: if (mWebView.canGoBack()) { mWebView.goBack(); } else { finish(); } return true; } } return super.onKeyDown(keyCode, event); }
Edit:
чтобы этот код работал, вам нужно добавить поле в
Activity
содержащий WebView:private WebView mWebView;
инициализировать его в
onCreate()
способ и вы должны быть хорошо идти.mWebView = (WebView) findViewById(R.id.webView);
Если вы используете Android 2.2 и выше (что сейчас большинство устройств), следующий код даст вам то, что вы хотите.
@Override public void onBackPressed() { if (webView.canGoBack()) { webView.goBack(); } else { super.onBackPressed(); } }
Это мое решение. Он работает также в фрагменте.
webView.setOnKeyListener(new OnKeyListener() { @Override public boolean onKey(View v, int keyCode, KeyEvent event) { if(event.getAction() == KeyEvent.ACTION_DOWN) { WebView webView = (WebView) v; switch(keyCode) { case KeyEvent.KEYCODE_BACK: if(webView.canGoBack()) { webView.goBack(); return true; } break; } } return false; } });
почему бы не использовать
onBackPressed()
?@Override public void onBackPressed() { // super.onBackPressed(); Do not call me! // Go to the previous web page. }
фокусировка также должна быть зарегистрирована в onBackPressed
@Override public void onBackPressed() { if (mWebview.isFocused() && mWebview.canGoBack()) { mWebview.goBack(); } else { super.onBackPressed(); finish(); } }
полная ссылка на следующую кнопку и индикатор выполнения:положите назад и кнопку Далее в webview
Если вы хотите перейти на заднюю страницу при нажатии на кнопку "Назад" телефона, используйте это:
@Override public void onBackPressed() { if (webView.canGoBack()) { webView.goBack(); } else { super.onBackPressed(); } }
вы также можете создать пользовательскую кнопку назад, как это:
btnback.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub if (wv.canGoBack()) { wv.goBack(); } } });
вот код с подтверждением выхода:
@Override public void onBackPressed() { if(webView.canGoBack()){ webView.goBack(); }else{ new AlertDialog.Builder(this) .setIcon(android.R.drawable.ic_dialog_alert) .setTitle("Exit!") .setMessage("Are you sure you want to close?") .setPositiveButton("Yes", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { finish(); } }) .setNegativeButton("No", null) .show(); } }
@Override public boolean onKeyDown(int keyCode, KeyEvent event) { // Check if the key event was the Back button and if there's history if ((keyCode == KeyEvent.KEYCODE_BACK) && myWebView.canGoBack()) { myWebView.goBack(); return true; } // If it wasn't the Back key or there's no web page history, bubble up to the default // system behavior (probably exit the activity) return super.onKeyDown(keyCode, event); }
вы должны следующие библиотеки в вашем классе обрабатывать onBackKeyPressed. canGoBack () проверяет, может ли webview ссылаться на предыдущую страницу. Если это возможно, то используйте функцию goBack () для ссылки на предыдущую страницу (go back).
@Override public void onBackPressed() { if( mWebview.canGoBack()){ mWebview.goBack(); }else{ //Do something else. like trigger pop up. Add rate app or see more app } }