Несколько веб-представлений Android Проблема: не удается загрузить первый, пока не загрузятся остальные - PullRequest
3 голосов
/ 08 апреля 2011

У меня есть активность, которая хранит 5 WebViews в ViewFlipper. Он показывает только по одному за раз. В onCreate () моей деятельности я загружаю первый WebView в основной поток, а остальные в фоновый поток.

Я ожидал увидеть WebView сразу, пока остальные еще загружались. Я обнаружил, что первый WebView я выполняю loadData() с последними финишами. Я нашел это, установив WebChromClient и проверив onProgressChanged(). Первый WebView всегда загружается последним.

Я предполагаю, что функция WebView.loadData () работает асинхронно, но я понятия не имею, почему первый загружаемый файл всегда заканчивается последним, не всегда 2-го, 3-го, 4-го или 1-го, но 5-го, который последний в моем случай.

Кто-нибудь знает почему?

Вот пример кода:

Настройка моих веб-представлений

for( int i = 0; i < 5; i++ ){
        WebView tempWebView = new WebView(this);
        tempWebView.setWebChromeClient( new MyWebChromClient( i ) );
        mFlipper.addView(tempWebView);
}
( (WebView)mFlipper.getChildAt(0) ).loadData( content, "text/html", "UTF-8" );
// load the others now in a background thread...

Вот мой WebChromClient

private class MyWebChromClient extends WebChromeClient{
    private int webViewId;
    public MyWebChromClient( int viewFlipperChildNum ){
        webViewId = viewFlipperChildNum;
    }

    public void onProgressChanged(WebView view, int newProgress) {
        if( newProgress == 100 )
            Log.i("ChromClient", "WebView Id: " + webViewId + "Progress changed: " + newProgress );

    };      
}

1 Ответ

0 голосов
/ 12 апреля 2011

Ну, немного покопавшись, я действительно так и не понял, почему первый WebView загружался последним, но я все же нашел решение для себя.Что я сделал, так это загрузил первый WebView, который нам показывают в одиночку.Затем в функции onProgressChanged (представление WebView, int newProgress) я загружаю остальные веб-представления в фоновом режиме.

Пример кода:

private class MyWebChromClient extends WebChromeClient{
private int webViewId;
public MyWebChromClient( int viewFlipperChildNum ){
    webViewId = viewFlipperChildNum;
}

public void onProgressChanged(WebView view, int newProgress) {
    if( newProgress == 100 ){
       //load other WebViews now that the first one is finished!
    }

};      

}

...