Java 后退按钮触发意外停止
当按下后退按钮时,我很难让下面的应用程序不显示错误。我只想让网站加载一个网页,并按“后退”按钮正常运行。有人看到这里有什么不对劲吗?LogCat没有显示错误,使用模拟器它不会中断,但在我的平板电脑上它总是中断 MyWebViewClient.javaJava 后退按钮触发意外停止,java,android,eclipse,Java,Android,Eclipse,当按下后退按钮时,我很难让下面的应用程序不显示错误。我只想让网站加载一个网页,并按“后退”按钮正常运行。有人看到这里有什么不对劲吗?LogCat没有显示错误,使用模拟器它不会中断,但在我的平板电脑上它总是中断 MyWebViewClient.java package com.MySite; import android.webkit.WebView; import android.webkit.WebViewClient; public class MyWebViewClient exten
package com.MySite;
import android.webkit.WebView;
import android.webkit.WebViewClient;
public class MyWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
}
package com.mysite;
import android.app.Activity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.webkit.WebView;
public class MySite extends Activity {
WebView DCWebView;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//init webview
WebView DCWebView = (WebView) findViewById(R.id.webview);
DCWebView.getSettings().setJavaScriptEnabled(true);
DCWebView.loadUrl("http://mobile.mysite.com");
//when a link is clicked, use the WebView instead of opening a new browser
DCWebView.setWebViewClient(new MyWebViewClient());
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_BACK) && DCWebView.canGoBack()) {
DCWebView.goBack();
return true;
}
return super.onKeyDown(keyCode, event);
}
}
MySite.java
package com.MySite;
import android.webkit.WebView;
import android.webkit.WebViewClient;
public class MyWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
}
package com.mysite;
import android.app.Activity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.webkit.WebView;
public class MySite extends Activity {
WebView DCWebView;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//init webview
WebView DCWebView = (WebView) findViewById(R.id.webview);
DCWebView.getSettings().setJavaScriptEnabled(true);
DCWebView.loadUrl("http://mobile.mysite.com");
//when a link is clicked, use the WebView instead of opening a new browser
DCWebView.setWebViewClient(new MyWebViewClient());
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_BACK) && DCWebView.canGoBack()) {
DCWebView.goBack();
return true;
}
return super.onKeyDown(keyCode, event);
}
}
当你回击平板电脑时,会出现什么错误?您是否尝试过重写onBackPressed而不是onKeyDown?您正在
onCreate()的内部声明一个名为DCWebView
的局部变量。换线
WebView DCWebView = (WebView) findViewById(R.id.webview);
到
然后,当按下后退键时,将出现一个后退堆栈(当您调用DCWebView.canGoBack()
,当前为false,因为您的全局DCWebView
从未初始化),后退按钮将按您期望的方式处理。我是否应该把this.finish()放进去
在onBackPressed中?如果希望活动关闭并返回到前一个活动(无论从何处启动DealClippings),则调用finish()应该可以,是的。onBackPressed的默认功能是执行finish(),因此,在我自己的应用程序中定义它不会起任何作用:-\n当用户点击“后退”按钮时,您能否澄清所需的功能是什么?另外,您是否能够将平板电脑连接到计算机,并检查DDMS中的Logcat以查看它记录的错误?您是说,将WebView
放在那里,我将其定义为全局的?当您在方法中声明DCWebView
时,为了回答您的第一条评论,它覆盖了同名的全局变量。因此,这是您在方法内部使用的DCWebView
,而不是您打算使用的方法。