簡體   English   中英

RecyclerView內部的Webview有時僅在Nougat設備上顯示空白屏幕

[英]Webview inside RecyclerView is showing blank screen sometimes on Nougat devices only

在我的Nougat設備中,RecyclerView內的webview有時是空白的。 當我慢慢滾動然后回到webview項目內容消失。 Android N以下的設備沒有問題.Android N使用Chrome作為應用的默認瀏覽器。 所以我認為Chrome中可能存在一個錯誤,因此我也在Chrome門戶網站中提出了一個錯誤。 在SO中有幾個相關的問題,但這並沒有解決我的問題。 那么在Android webview設置中有哪種方法可以解決這個問題? 我在bug鏈接中寫了詳細說明。

錯誤鏈接: 點擊這里

我的WebView的onBindViewHolder方法代碼是

final VHItem vhItem = (VHItem) holder;

vhItem.webViewChild.getSettings().setUseWideViewPort(false);
vhItem.webViewChild.getSettings().setJavaScriptEnabled(true);

vhItem.webViewChild.loadData("<body>" + html + "</body>", "text/html;charset=utf-8", "utf-8");

哪里

html是html字符串

更新

他們已經解決了這個問題。 如果您仍然遇到同樣的問題,請嘗試將Android Chrome版本更新為61或更高版本。

對於啟動webview消耗內存,因為它必須加載並呈現html數據。 我認為如果您使用以下兩種方式之一實現它會更好,而不是在回收站視圖中使用webview:

  1. 您處理html中的數據列表並將其發送到webview並完全刪除回收站視圖
  2. 您在xml中繪制預期內容的布局並將其直接膨脹到recyclerview並刪除完成的webview。 (注意:您可以根據適配器位置和該位置的數據將不同視圖擴展到回收器中)。

使用webview似乎是實現你正在嘗試的任何東西的簡單方法,但相信我,這些缺點超過了收益。 所以最好避免它。

出於許多可能的原因可能會出現此問題

  • 滾動非常快時,Recyclerview完全基於將視圖放大最少時間並重用現有視圖。 這意味着當您在視圖(一個項目)退出屏幕時滾動時,只需更改其內容即可在下面購買相同的視圖。當您從Internet加載時,首先下載所有數據然后再顯示它總是更好。 Webview消耗大量數據,完全違反設計原則,將它們放入Recyclerview中。

要修復此問題,您可以添加一些按鈕來重新加載數據或每次顯示視圖時刷新。

  • Nougat從http urlconnection類中刪除了一些函數我不確定這個。 但是在google開發者視頻中,T看到了一些關於某些功能和方法的折舊的問題

希望你覺得這很有幫助。

我通過在RecyclerView的上層浮動WebView,同時在RecyclerView中放置一個HOLDER視圖來解決這個問題。 然后我在RecyclerView的scroll事件中注冊一個監聽器。 我控制浮動WebView的位置和可見性

您可以在onCreateViewHolder嘗試此代碼

ViewGroup.LayoutParams lp = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
                        WebView web = new WebView(parent.getContext());
                        web.setLayoutParams(lp);
                        String url="...";
                        WebSettings settings = web.getSettings();
                        settings.setJavaScriptEnabled(true);
                        settings.setDomStorageEnabled(true);

                        web.loadUrl(url);
                        holder = new ViewHolder(web);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM