활동 전반에서 webview를 재사용하려고합니다. 여기 제가하는 일의 샘플이 있습니다.텍스트를 선택하고 "웹 검색"을 클릭하면 응용 프로그램이 충돌합니다.
두 가지 활동, Main
및 Secondary
이 있습니다.
메인의 onResume()에서 웹보기 개체를 만들고 응용 프로그램 컨텍스트에 저장합니다.
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
에 첨부합니다.
는 Secondary
의 onCreate()
에서 - WebViews 안드로이드 매우 느린 내가 정말 Secondary
활동에 관해서이 프리로드를 원하기 때문에
WebView cachedWebView = ((WebViewReuseApplication) getApplicationContext()).getCachedWebView();
((LinearLayout) findViewById(R.id.webview_holder)).addView(cachedWebView, new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
나는이 모든 일을하고있다.
이 방법이 완벽하게 작동하지만 여기에 문제가 있습니다. 보조 활동에있을 때 특정 텍스트를 선택하여 길게 누르면 웹 검색을 클릭하면 내 앱이 다운됩니다. 이 문제를 해결할 수있는 방법이 있습니까? 나는이 프리 로딩 작업을 원합니다. 동일한 이유로 WebView를 액티비티 컨텍스트로 초기화 할 수 없습니다.
UPDATE - 나는 당신이 웹보기의 활동을 호출 할 경우 당신의 의도에 아래에 언급 된 플래그를 추가 할 필요가 있다고 생각
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)
예외 세부 사항은 어디에 있습니까? logcat? –
추가됨. 그리고 이것은 JellyBean에서 완벽하게 작동합니다. 이것은 Android의 버그입니까? – Enigma
startActivity()를 사용할 코드를 추가 할 수 있습니까? –