【问题标题】:android finish activity contain a webview when press back button当按下后退按钮时,android完成活动包含一个webview
【发布时间】:2013-05-17 00:06:06
【问题描述】:

我有一个 android 应用程序,其中有一个按钮。用户按下该按钮,然后它启动一个包含 webview 的活动。 问题是为了在用户第一次按下后退按钮时完成 webview 活动,我试图完成该活动但没有工作,它返回到历史页面。我多次按下后退按钮,webview 活动完成。 当用户第一次按下按钮时,我的应用如何完成 webview 活动?

这是我的 webview 活动

public class SocialWebViewActivity extends Activity {

private WebView webView;
ProgressDialog mProgress;
public static String url="";
@SuppressLint("SetJavaScriptEnabled")
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.social_web_view);
    webView = (WebView) findViewById(R.id.social_web_view_external);
    webView.getSettings().setJavaScriptEnabled(true);

     // the init state of progress dialog
    mProgress = ProgressDialog.show(this, "Web", "Loading...");

    // add a WebViewClient for WebView, which actually handles loading data from web
    webView.setWebViewClient(new WebViewClient() {
        // load url
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            return true;
        }

        // when finish loading page
        public void onPageFinished(WebView view, String url) {
            if(mProgress.isShowing()) {
                mProgress.dismiss();
            }
            view.clearHistory();
        }

        @Override
        public void onReceivedError(WebView view, int errorCode,
                String description, String failingUrl) {
            Toast.makeText(getApplicationContext(), description, Toast.LENGTH_LONG).show();
            if(mProgress.isShowing()) {
                mProgress.dismiss();
            }
            super.onReceivedError(view, errorCode, description, failingUrl);
        }
    });


    if(!"".equals(SocialWebViewActivity.url)){
        webView.loadUrl(SocialWebViewActivity.url);
    }
}


}

【问题讨论】:

  • 你是在模拟器还是设备上测试这个?

标签: android android-webview back-button


【解决方案1】:

覆盖 onKeyDown(param)

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if ((keyCode == KeyEvent.KEYCODE_BACK) ) {
        webView.clearHistory(); // clear history
        finish(); // finish activity
        return true;
    }

    return super.onKeyDown(keyCode, event);
}

【讨论】:

  • 它不起作用,因为它实际上并没有清除历史记录。当我点击返回按钮 3 次时,活动结束
  • 尝试调用完成。因为它在我测试过的设备上工作。经过两次测试,在我的设备上运行良好。
  • 我在我的设备上用不同的 url 测试了你的代码,上面添加的代码可以正常工作。
  • @chinh 尝试加载此 URL slashdot.org 作为示例。它可以在我的设备上运行,您的代码除了提到的网址外没有任何变化。只有其他更改是我添加了上面的 onKeyDown(param)
  • 抱歉没有问到这个问题,我没想到这个问题这么复杂。我尽量简单
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多