我的Android应用程序有一个可点击的欢迎页面,通向带有多个图标的webview。当我点击图标时,它会打开一个存储在assets文件夹中的HTML文件。同样,单击其他图标会导致在同一webview实例中打开HTML资源。我的问题是,如果让我假设我在第三级导航,我按下Android设备后退按钮,我回到欢迎页面(第一级导航)。如果我在第三级导航中按下后退按钮,如何进入我的所有页面图标所在的第二级导航。我的二级导航代码如下:
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);
}
}
我得到空指针异常。
答案 0 :(得分:0)
如果我理解正确,您可以尝试覆盖onKeyDown
功能,并按后退键做出反应。
WebView webview;
public void onCreate(...)
{
...
webview = (WebView) findViewById(...);
...
}
public boolean onKeyDown(int keyCode, KeyEvent event)
{
if((keyCode == KeyEvent.KEYCODE_BACK) && webview.canGoBack())
{
webview.goBack();
return true;
}
return super.onKeyDown(keyCode, event);
}
当您按后退键时,这将截取,如果您的webview有历史记录,它将在历史记录中退后一步。如果您已加载第一页并按回,它将终止webview活动并返回欢迎活动。
编辑:
是的,你也可以使用onBackPressed
,我想这会更合适。正如njzk2所指出的那样,另一种方法就是。
@Override
public void onBackPressed()
{
if(mWebView.canGoBack())
{
mWebView.goBack();
}
else
{
super.onBackPressed();
}
}