私のAndroidアプリケーションには、クリック可能なウェルカムページがあり、複数のアイコンが付いたWebビューが表示されます。アイコンをクリックすると、アセットフォルダに保存されているHTMLファイルが開きます。同様に、他のアイコンをクリックすると、同じWebビューインスタンスでHTMLリソースが開きます。私の問題は、私がナビゲーションの第3レベルにいて、Androidデバイスの戻るボタンを押すと、ウェルカムページ(第1レベルのナビゲーション)に戻ることです。ナビゲーションの第3レベルで戻るボタンを押した場合、すべてのページのアイコンが表示されているナビゲーションの第2レベルに到達するにはどうすればよいですか。第2レベルのナビゲーションのコードは次のとおりです。
public class Home extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
WebView webview = (WebView) findViewById(R.id.webView1);
webview.loadUrl("file:///android_asset/webpages/index.html");
webview.getSettings().setBuiltInZoomControls(true);
webview.getSettings().setSupportZoom(true);
webview.getSettings().setJavaScriptEnabled(true);
}
}
index.htmlには、contact.html、feedback.htmlなどのさまざまなページに移動するためのアイコンが含まれています。contact.htmlにいて、Androidの戻るボタンを押すと、アプリケーションの最初の画面ではなく、index.htmlにアクセスする必要があります。
@Zyber私はJavaとAndroidの開発に不慣れです。私はあなたの提案を試しましたが、戻るボタンを押すと、強制終了エラーが発生します。私のコードは次のとおりです。
public class Home extends Activity {
private WebView webview;
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
webview.goBack();
return true;
}
return super.onKeyDown(keyCode, event);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
WebView webview = (WebView) findViewById(R.id.webView1);
webview.loadUrl("file:///android_asset/webpages/index.html");
webview.getSettings().setBuiltInZoomControls(true);
webview.getSettings().setSupportZoom(true);
webview.getSettings().setJavaScriptEnabled(true);
}
}
私のlogcatコードは以下の通りです:
0-02 19:01:07.536: E/AndroidRuntime(4160): FATAL EXCEPTION: main
10-02 19:01:07.536: E/AndroidRuntime(4160): java.lang.NullPointerException
10-02 19:01:07.536: E/AndroidRuntime(4160): at com.summit.mpidc.Home.onKeyDown(Home.java:21)
10-02 19:01:07.536: E/AndroidRuntime(4160): at android.view.KeyEvent.dispatch(KeyEvent.java:2553)
10-02 19:01:07.536: E/AndroidRuntime(4160): at android.app.Activity.dispatchKeyEvent(Activity.java:2329)
10-02 19:01:07.536: E/AndroidRuntime(4160): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:1825)
10-02 19:01:07.536: E/AndroidRuntime(4160): at android.view.ViewRootImpl.deliverKeyEventPostIme(ViewRootImpl.java:3340)
10-02 19:01:07.536: E/AndroidRuntime(4160): at android.view.ViewRootImpl.handleFinishedEvent(ViewRootImpl.java:3313)
10-02 19:01:07.536: E/AndroidRuntime(4160): at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2473)
10-02 19:01:07.536: E/AndroidRuntime(4160): at android.os.Handler.dispatchMessage(Handler.java:99)
10-02 19:01:07.536: E/AndroidRuntime(4160): at android.os.Looper.loop(Looper.java:137)
10-02 19:01:07.536: E/AndroidRuntime(4160): at android.app.ActivityThread.main(ActivityThread.java:4424)
10-02 19:01:07.536: E/AndroidRuntime(4160): at java.lang.reflect.Method.invokeNative(Native Method)
10-02 19:01:07.536: E/AndroidRuntime(4160): at java.lang.reflect.Method.invoke(Method.java:511)
10-02 19:01:07.536: E/AndroidRuntime(4160): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:817)
10-02 19:01:07.536: E/AndroidRuntime(4160): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:584)
10-02 19:01:07.536: E/AndroidRuntime(4160): at dalvik.system.NativeStart.main(Native Method)
編集されたコード:
public class Home extends Activity {
private WebView webview;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
WebView webview = (WebView) findViewById(R.id.webView1);
// WebView webview = new WebView(this);
// setContentView(webview);
webview.loadUrl("file:///android_asset/webpages/index.html");
webview.getSettings().setBuiltInZoomControls(true);
webview.getSettings().setSupportZoom(true);
webview.getSettings().setJavaScriptEnabled(true);
webview.getSettings().setUseWideViewPort(true);
webview.setInitialScale(1);
webview.canGoBack();
}
public boolean onKeyDown(int keyCode, KeyEvent event)
{
if((keyCode == KeyEvent.KEYCODE_BACK) && webview.canGoBack())
{
webview.goBack();
return true;
}
return super.onKeyDown(keyCode, event);
}
}
nullポインタ例外が発生します。