选择文本并单击“Web搜索”会使应用程序崩溃

时间:2012-10-11 13:09:02

标签: android android-webview applicationcontext

我正在尝试跨活动重复使用webview。这是我正在做的一个样本。

有两项活动,MainSecondary

在Main的onResume()中,我创建了一个webview对象,并将其保存在我的应用程序上下文中。

    WebView wv = new WebView(getApplicationContext());
    wv.getSettings().setJavaScriptEnabled(true);
    wv.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT);
    wv.setWebViewClient(new WebViewClient() {

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            return true;
        }

        @Override
        public void onPageFinished(WebView view, String url) {
            Log.e("test", "onPageFinished");
            ((WebViewReuseApplication) getApplicationContext()).setCachedWebView(view);
        }
    });
    wv.loadUrl("http://www.someurl.com/path/to/somewhere");

然后按下Main中的按钮,我将他带到活动Secondary。在这里,我从Application对象获取已加载的网页视图,并将其附加到ViewGroup

onCreate()的{​​{1}} -

Secondary

我正在做这一切,因为WebViews在Android中非常慢,我真的希望它在 WebView cachedWebView = ((WebViewReuseApplication) getApplicationContext()).getCachedWebView(); ((LinearLayout) findViewById(R.id.webview_holder)).addView(cachedWebView, new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); Activity时预先加载。

虽然这非常有效,但这是一个问题。当它处于辅助活动时,如果我长按特定文本进行选择,然后单击网页搜索,我的应用程序崩溃了。 有没有办法解决这个问题?我真的想要这个预加载的东西,我出于同样的原因我不能用活动上下文初始化WebView。

enter image description here

更新 -

这是我得到的logcat输出 -

Secondary

1 个答案:

答案 0 :(得分:0)

我认为您需要将下面提到的标志添加到您调用WebView的Activity的Intent中,

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

或者至少这是logcat错误报告的建议,

Calling startActivity() from outside of an Activity  context requires the FLAG_ACTIVITY_NEW_TASK flag. 

所以我相信这是你应该如何为较低的Android版本做到这一点。

如果上述解决方案不起作用,请将所有applcationContext替换为您的Activity上下文,

而不是,

 WebView wv = new WebView(getApplicationContext());

WebView wv = new WebView(activity.this);

不仅在这里,而且在你可以使用的所有地方 getApplicationContext()