我有一个在 ViewFlipper
中存储 5 个 WebViews
的 Activity 。它一次只显示一个。在我的 Activity 的 onCreate() 中,我在主线程中加载第一个 WebView,在后台线程中加载其他 WebView。
我所期望的是在其他人仍在加载时立即看到 WebView
。我发现第一个 WebView
我执行了一个 loadData()
最后完成。我通过设置 WebChromClient
并检查 onProgressChanged()
发现了这一点。第一个 WebView 似乎总是最后加载。
我假设 WebView.loadData() 函数异步工作,但我不知道为什么我加载的第一个总是最后完成,而不是第 2、3、4 或 1,而是第 5 个,这是我的最后一个案例。
有人知道为什么吗?
下面是一些示例代码:
设置我的 WebView
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 );
};
}
最佳答案
好吧,在四处寻找之后,我真的不明白为什么最后加载第一个 WebView,但我确实为自己想出了一个解决方案。我所做的是加载我们单独显示的第一个 WebView。然后,在 onProgressChanged(WebView view, int newProgress) 函数中,我在后台加载其余的 WebView。
示例代码:
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!
}
};
关于Android 多 WebViews 问题 : Not being able to load the first one until the rest have loaded,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5588269/