2012-11-07 14 views
8

Ich habe ein DialogFragment mit einem WebView drin. Wenn die Webansicht die Seite nicht schnell genug lädt, wird das DialogFragment vollständig verkleinert und die Webansicht wird nicht angezeigt. Andernfalls, wenn das Laden schnell war, wird das WebView angezeigt.android dialogFragment "manchmal" webview nicht anzeigen

Antwort

9

fand ich die Lösung von mir. Wenn Sie LinearLayout als Stammansicht für Ihr DialogFragment verwenden, wird dies geschehen, indem Sie es in FrameLayout ändern, um das Problem zu lösen. Ich verstehe nicht warum, aber es funktioniert.

+2

In meinem Fall war die Stammansicht ein FrameLayout und ich schaltete es auf RelativeLayout und es funktionierte magisch ... sehr seltsam. Es ist jetzt nicht korrekt auf seinen Inhalt, was bedeutet, dass es passt, aber das ist ok für mich. – for3st

0

Wenn Sie können die Web-Ansicht durch AsyncTaks das Dialog-Fragment Laden nicht zeigen, weil AsyncTasks kann nicht das Layout ändern, die in dem Haupt-Thread ist. Werfen Sie einen Blick darauf.

1

In meinem Fall habe ich benutzerdefinierte WebView wie ExpandableHeightWebView für dynamische Höhe.

@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); 
    } 
} 

Ich rufe setExpanded(true); nach myWebView.loadData(data,null);
Dieses Problem gelöst, wenn ich setExpanded(true); Zeile löschen.

1

Ich habe es in zwei Geräten versucht.

Im ersten Gerät funktionierte Nexus 6 wie gesagt David "Ich fand die Lösung selbst. Wenn Sie LinearLayout als Root-Ansicht für Ihr DialogFragment verwenden, wird dies passieren, änderte es zu FrameLayout das Problem gelöst. Ich verstehe nicht warum, Aber es funktioniert". Aber ich versuchte es in einem zweiten Gerät (Galaxy Prime) und Überraschung, nicht funktioniert. Nachdem sie versucht make setVisible onPageStarted() innerhalb Rückruf WebView in meiner WebViewClient GONE und nach setVisible VISIBLE innerhalb Rückruf onPageFinished() und arbeitete für meine.

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); 
 
    } 
 

 
}