Activity中的fragment載入webview 出現空白
在開發中遇到了載入fragment出現空白的問題,剛開始並沒有判斷出是因為裡面webview的原因。具體介面情況是在一個activity中有兩個fragment,然後點選對應的按鈕,切換fragment, fragment中的佈局有webview和其他按鈕。
fragment的新增我使用了show 和hide因為我需要向fragment中傳送廣播,所以需要 fragment一直存在,replace的話,每replace一次便會重新走fragment的生命週期,可能會收不到廣播。所以在activity中onCreate方法中將兩個fragment初始化並添加了進去。
然後我在點選第二個按鈕,將第一個碎片hide(),第二個碎片show()之後,發現頁面是空白的,內容並沒有加載出來,以為是第二個fragemnt並沒有show,但是發現fragment中的佈局除了webview中的內容外,其他控制元件都出來了,因此判斷是webview加載出現了問題。
在網上搜索之後,發現通常的解決方法有兩種,一是將最外層的linearLayout改為frameLayout,例如這種
使用FrameLayout代替LinearLayout,此時不會像android.R.id.content覆蓋掉原佈局的東西,而是根據FrameLayout所在layout進行佈局
- <
- android:id="@+id/my_fragment"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- />
由於我的佈局中還有其他控制元件 並不只是一個webvie ,然後我在frameLayout中添加了一個LinearLayout,把控制元件加到了linearLayout中,執行之後發現,仍然未加載出來。
第二種的解決方式是 使用android.R.id.content,代替你的佈局id,也就是我們通常設定的setContentView()方法,具體的使用像這樣
使用android.R.id.content,代替你的佈局,我的是LinearLayout,但是使用android.R.id.content,Fragment會覆蓋原佈局的內容,此內容不會清除。
- getFragmentManager().beginTransaction().add(android.R.id.content,one,"qe").commit();
其中也提到了,使用之後會覆蓋你最開始佈局內容,因為是在根佈局上加的,所以會覆蓋最開始在 setContentView()中的內容,該方法對我也不適用。
在使用fragment的hide()和show()方法時,會重走一個 onHiddenChanged()方法,既然webview沒有將我們需要的內容進行載入,那可以在重走onHiddenChanged()方法時讓webview重新載入內容,所以我是如下解決的:
@Override public void onHiddenChanged(boolean hidden) { super.onHiddenChanged(hidden); if (hidden) { //寫需要的邏輯 } else { if (dealChartBean.getyPoint() != null && dealChartBean.getyPoint().size() > 0) { //載入webview mWebView.loadUrl("file:///android_asset/jsWeb/echarts.html"); mWebView.setWebViewClient(new WebViewClient() { @Override public void onPageFinished(WebView view, String url) { JSONObject obj = stringJSon.optJSONObject("option"); useJSMethod(obj); super.onPageFinished(view, url); } @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } }); mWebView.setVisibility(View.VISIBLE); mTVNoData.setVisibility(View.GONE); } } } 再次執行之後發現,可以加載出內容。在此記錄(ps 將截圖上傳部落格 釋出之後發現 截圖沒了,這是csdn的bug嗎???)