一旦意图完成,webview活动重新加载

时间:2014-01-09 07:44:18

标签: android android-intent webview

我在意图完成时遇到了重新加载活动的问题。

我有一个使用webview的ShowHTM活动。 webview中的链接之一会生成发送电子邮件的意图。 ShowHTM活动启动一个微调器,一旦加载了webview,微调器就会停止。 单击webview上的链接,将弹出电子邮件客户端列表。选择一个后,我发送电子邮件。一旦发送电子邮件,控件就会返回ShowHTM活动,并再次开始显示微调器。我不需要。我想控制电子邮件意图的退出代码。即如果意图成功,则退出ShowHTM活动。

对此有何帮助?

这是我的ShowHTM活动:

public class ShowHTM extends Activity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.show_htm);
startSpinner("  Generating Preview...  ");
h_wv = (WebView)findViewById(R.id.h_wv);
h_wv.setVisibility(View.GONE);
startSpinner("  Generating Preview...  ");
h_wv.setInitialScale(24);
h_wv.getSettings().setLoadWithOverviewMode(true);
h_wv.getSettings().setUseWideViewPort(true);
h_wv.getSettings().setDefaultZoom(ZoomDensity.FAR);
h_wv.getSettings().setBuiltInZoomControls(true);
h_wv.getSettings().setLayoutAlgorithm(LayoutAlgorithm.NORMAL);
h_wv.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
h_wv.getSettings().setAppCacheEnabled(false);
h_wv.getSettings().setJavaScriptEnabled(true);
h_wv.setWebViewClient(new WebViewClient() {
    @Override
    public void onPageFinished(WebView view, String url) {
        h_wv.setVisibility(View.VISIBLE);
        if(dl != null){
            dl.cancel();
        }
    }

    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url){
        if(url.startsWith("mailto:")) {
            Intent emailIntent = new Intent(Intent.ACTION_SENDTO, Uri.fromParts("mailto",url.replaceFirst("mailto:", ""), null));
            emailIntent.putExtra(Intent.EXTRA_SUBJECT, "User Comment:");
            emailIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            startActivity(Intent.createChooser(emailIntent, "Send email..."));
            return true;
            } 
        else {
            view.loadUrl(url);
        }
        return false;
    }
});
}
}

3 个答案:

答案 0 :(得分:0)

也许尝试保存您的网页浏览状态:

protected void onSaveInstanceState(Bundle outState) {
    h_wv.saveState(outState);
}

public void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.blah);
   if (savedInstanceState != null) {
      ((WebView)findViewById(R.id.webview)).restoreState(savedInstanceState);
   } else {
       // inflate and display spinner
      startSpinner("  Generating Preview...  ");
      h_wv = (WebView)findViewById(R.id.h_wv);
      ...
   }
   // set settings & scale
}

如果它不起作用,我建议你看看这个解决方案:

http://www.devahead.com/blog/2012/01/preserving-the-state-of-an-android-webview-on-screen-orientation-change/

我认为旋转是一样的问题,你的活动似乎被破坏但你可以保存你的webview状态。

答案 1 :(得分:0)

首次运行发送邮件时,请尝试将boolean变量设置为true。并且在任何时候启动微调器之前检查此变量是否为假。

P.S。什么是'dl'?

答案 2 :(得分:0)

您希望startActivityForResult并实施onActivityResult - 无法保证onActivityResult中的resultCode在成功发送电子邮件后将成为RESULT_OK(因为您依赖第三方应用程序),但这是一个不错的选择。

至于你的其他问题,当URL为mailto时,你可以尝试在shouldOverrideUrlLoading中返回false: