2012-10-11 11 views
-1

我正在嘗試重複使用跨視圖的網頁視圖。這是我正在做的一個樣本。選擇文本並單擊「Web Search」會使應用程序崩潰

有兩個活動,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對象中獲取已加載的webview並將其附加到ViewGroup

SecondaryonCreate() -

WebView cachedWebView = ((WebViewReuseApplication) getApplicationContext()).getCachedWebView(); 

    ((LinearLayout) findViewById(R.id.webview_holder)).addView(cachedWebView, new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); 

我所做的這一切都是因爲網頁視圖是Android的非常慢,我真的很想當談到Secondary活動它被預裝。

雖然這工作得很好,但這是一個問題。當它處於次要活動狀態時,如果我長時間按住特定文本進行選擇,然後單擊Web搜索,我的應用程序就會崩潰。 有什麼辦法可以解決這個問題嗎?我真的想要這個預加載的東西,我出於同樣的原因,我無法用活動上下文初始化WebView。

enter image description here

更新 -

這裏的logcat的輸出我得到 -

10-11 18:41:09.318: E/AndroidRuntime(3359): FATAL EXCEPTION: main 
10-11 18:41:09.318: E/AndroidRuntime(3359): android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want? 
10-11 18:41:09.318: E/AndroidRuntime(3359):  at android.app.ContextImpl.startActivity(ContextImpl.java:922) 
10-11 18:41:09.318: E/AndroidRuntime(3359):  at android.content.ContextWrapper.startActivity(ContextWrapper.java:283) 
10-11 18:41:09.318: E/AndroidRuntime(3359):  at android.webkit.SelectActionModeCallback.onActionItemClicked(SelectActionModeCallback.java:139) 
10-11 18:41:09.318: E/AndroidRuntime(3359):  at com.android.internal.policy.impl.PhoneWindow$DecorView$ActionModeCallbackWrapper.onActionItemClicked(PhoneWindow.java:2651) 
10-11 18:41:09.318: E/AndroidRuntime(3359):  at com.android.internal.app.ActionBarImpl$ActionModeImpl.onMenuItemSelected(ActionBarImpl.java:757) 
10-11 18:41:09.318: E/AndroidRuntime(3359):  at com.android.internal.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:735) 
10-11 18:41:09.318: E/AndroidRuntime(3359):  at com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:149) 
10-11 18:41:09.318: E/AndroidRuntime(3359):  at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:874) 
10-11 18:41:09.318: E/AndroidRuntime(3359):  at com.android.internal.view.menu.MenuPopupHelper.onItemClick(MenuPopupHelper.java:156) 
10-11 18:41:09.318: E/AndroidRuntime(3359):  at android.widget.AdapterView.performItemClick(AdapterView.java:292) 
10-11 18:41:09.318: E/AndroidRuntime(3359):  at android.widget.AbsListView.performItemClick(AbsListView.java:1182) 
10-11 18:41:09.318: E/AndroidRuntime(3359):  at android.widget.AbsListView$PerformClick.run(AbsListView.java:2710) 
10-11 18:41:09.318: E/AndroidRuntime(3359):  at android.widget.AbsListView$1.run(AbsListView.java:3465) 
10-11 18:41:09.318: E/AndroidRuntime(3359):  at android.os.Handler.handleCallback(Handler.java:605) 
10-11 18:41:09.318: E/AndroidRuntime(3359):  at android.os.Handler.dispatchMessage(Handler.java:92) 
10-11 18:41:09.318: E/AndroidRuntime(3359):  at android.os.Looper.loop(Looper.java:137) 
10-11 18:41:09.318: E/AndroidRuntime(3359):  at android.app.ActivityThread.main(ActivityThread.java:4511) 
10-11 18:41:09.318: E/AndroidRuntime(3359):  at java.lang.reflect.Method.invokeNative(Native Method) 
10-11 18:41:09.318: E/AndroidRuntime(3359):  at java.lang.reflect.Method.invoke(Method.java:511) 
10-11 18:41:09.318: E/AndroidRuntime(3359):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:986) 
10-11 18:41:09.318: E/AndroidRuntime(3359):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:753) 
10-11 18:41:09.318: E/AndroidRuntime(3359):  at dalvik.system.NativeStart.main(Native Method) 
+0

你的異常細節在哪裏? logcat? –

+0

已添加。這對JellyBean來說非常好。這是Android中的錯誤嗎? – Enigma

+0

你可以在你使用startActivity()的地方添加代碼嗎? –

回答

0

我認爲你需要,你撥打的WebView活動,以下面提到的標誌添加到你的意圖,

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 

或者至少這是什麼l ogcat錯誤報告建議,

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

所以我相信這是你應該如何做更低的Android版本。

如果以上方法無效,那麼像這樣的活動背景下更換所有applcationContext,

相反的,

WebView wv = new WebView(getApplicationContext()); 

嘗試

WebView wv = new WebView(activity.this); 

這裏不僅,但在所有可以使用的地方getApplicationContext()

+0

如果我在開始活動時發生崩潰,那麼您所說的可能是問題所在。但是,當這個系統操作欄的「Web搜索」選項試圖打開另一個可能是瀏覽器的活動時,就會發生這種情況。據我看來,他們應該在他們的操作欄的實現中添加這個FLAG_ACTIVITY_NEW_TASK。 – Enigma

+0

我剛剛提供了基於logcat異常的答案。你試過了嗎? –

+0

是的,我做到了。它沒有幫助。如果需要,我可以提供一個示例項目。 – Enigma