Кнопка Android back back в webview

Я использую следующий код для отображения веб-просмотра в своем приложении для Android.

package com.company.myapp; import com.google.android.apps.analytics.GoogleAnalyticsTracker; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.Window; import android.webkit.WebChromeClient; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.Toast; public class ArticlesActivity extends Activity { /** Initialize the Google Analytics Tracker */ GoogleAnalyticsTracker tracker; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getWindow().requestFeature(Window.FEATURE_PROGRESS); getWindow().setFeatureInt(Window.FEATURE_PROGRESS, Window.PROGRESS_VISIBILITY_ON); WebView webview = new WebView(this); setContentView(webview); setProgressBarVisibility(true); webview.getSettings().setJavaScriptEnabled(true); webview.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY); final Activity activity = this; tracker = GoogleAnalyticsTracker.getInstance(); // Start the tracker, updating google every 20 seconds tracker.start((String) getText(R.string.analyticsID), 20, this); webview.setWebChromeClient(new WebChromeClient() { public void onProgressChanged(WebView view, int progress) { activity.setProgress(progress * 100 ); } }); webview.setWebViewClient(new WebViewClient() { public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { Toast.makeText(activity, "Oh no! " + description, Toast.LENGTH_SHORT).show(); } }); webview.loadUrl("http://www.google.com"); } @Override public void onResume() { tracker.trackPageView("ArticlesActivity"); super.onResume(); } @Override protected void onDestroy() { super.onDestroy(); // Stop the tracker when it is no longer needed. tracker.stop(); } } 

Мне нужно было бы включить кнопку «Назад», чтобы отступить, если история существует, а не просто выйти из веб-просмотра.

Я пробовал много разных примеров кода, таких как это, но не могу заставить их работать. Приложение просто выключается при нажатии кнопки «Назад».

Вот мой код с кодом кнопки «назад», но он просто сбой приложения, когда нажата кнопка «Назад»:

 package com.company.myapp; import com.google.android.apps.analytics.GoogleAnalyticsTracker; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.Window; import android.webkit.WebChromeClient; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.Toast; public class ArticlesActivity extends Activity { WebView webview; /** Initialize the Google Analytics Tracker */ GoogleAnalyticsTracker tracker; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getWindow().requestFeature(Window.FEATURE_PROGRESS); getWindow().setFeatureInt(Window.FEATURE_PROGRESS, Window.PROGRESS_VISIBILITY_ON); WebView webview = new WebView(this); setContentView(webview); setProgressBarVisibility(true); webview.getSettings().setJavaScriptEnabled(true); webview.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY); final Activity activity = this; tracker = GoogleAnalyticsTracker.getInstance(); // Start the tracker, updating google every 20 seconds tracker.start((String) getText(R.string.analyticsID), 20, this); webview.setWebChromeClient(new WebChromeClient() { public void onProgressChanged(WebView view, int progress) { activity.setProgress(progress * 100 ); } }); webview.setWebViewClient(new WebViewClient() { public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { Toast.makeText(activity, "Oh no! " + description, Toast.LENGTH_SHORT).show(); } }); webview.loadUrl("http://www.google.com"); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { webview.goBack(); return true; } return super.onKeyDown(keyCode, event); } @Override public void onResume() { tracker.trackPageView("ArticlesActivity"); super.onResume(); } @Override protected void onDestroy() { super.onDestroy(); // Stop the tracker when it is no longer needed. tracker.stop(); } } 

Может ли кто-нибудь помочь мне с решением?

Понял! Ваша проблема в этой строке

 WebView webview = new WebView(this); 

Вместо использования переменной-члена вы создаете переменную внутри функции, и, следовательно, ваша переменная-член имеет значение null внутри функции onKeyDown.

Просто замените его

 webview = new WebView(this);