Android dialogFragment «иногда», не отображающий веб-просмотр

У меня есть DialogFragment с WebView внутри него. Если webview не загружает страницу достаточно быстро, DialogFragment полностью сжимается и не отображает веб-просмотр. В противном случае, если загрузка была быстрой, отображается WebView.

Я нашел решение самостоятельно. Если вы используете LinearLayout в качестве корневого представления для вашего DialogFragment, это произойдет, изменив его на FrameLayout, устранить проблему. Я не понимаю, почему, но это работает.

В моем случае я использовал пользовательский WebView, такой как ExpandableHeightWebView для динамической высоты.

 @Override public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { if (isExpanded()) { int expandSpec = MeasureSpec.makeMeasureSpec(MEASURED_SIZE_MASK, MeasureSpec.AT_MOST); super.onMeasure(widthMeasureSpec, expandSpec); ViewGroup.LayoutParams params = getLayoutParams(); params.height = getMeasuredHeight(); } else { super.onMeasure(widthMeasureSpec, heightMeasureSpec); } } 

Я setExpanded(true); После myWebView.loadData(data,null);
Эта проблема решена при удалении setExpanded(true); линия.

Если вы можете загружать веб-представление через AsyncTaks, фрагмент Dialog не отображается, потому что AsyncTasks не может изменить макет, который находится в основном потоке. Взгляните на это.

Я пробовал в двух устройствах.

В первом устройстве Nexus 6 работал так, как сказал Дэвид. «Я нашел решение самостоятельно. Если вы используете LinearLayout в качестве корневого представления для вашего DialogFragment, это произойдет, изменив его на FrameLayout, разрешите проблему. Я не понимаю, почему, но он работает" , Но я попробовал во втором устройстве (Galaxy Prime) и удивился, не работал. После попытки сделать setVisible GONE WebView в моем WebViewClient внутри callback onPageStarted() и после setVisible VISIBLE внутри callback onPageFinished() и работал для моего.

 public class MyWebClient extends WebViewClient { private static final String LOG_CAT = "NetPayWebClient"; @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { Log.e(LOG_CAT, "onPageStarted(): " + url); view.setVisibility(View.GONE); super.onPageStarted(view, url, favicon); } @Override public void onPageFinished(WebView view, String url) { Log.e(LOG_CAT, "onPageFinished(): " + url); view.setVisibility(View.VISIBLE); super.onPageFinished(view, url); } }