好的,因为我的WebView加载页面通常需要2秒钟,所以我决定为我的用户显示“加载”屏幕。我发现了一个名为Shimmer的非常好的库,它显示了一个动画文本视图。当我的webview开始加载页面时,我将setContentView调用到闪烁布局,当它完成后,我再次将setContentView调用到webview。问题是当我调用setContentView时,WebView是空白的。这是为什么?
这是我的代码:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.webview);
WebView webView = (WebView) findViewById(R.id.webview);
webView.setWebViewClient(new WebViewClient(){
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon)
{
// TODO show you progress image
super.onPageStarted(view, url, favicon);
Log.i("WEBVIEW", "Loading");
shimmer = new Shimmer();
setContentView(R.layout.shimmer);
ShimmerTextView shimmerTextView = (ShimmerTextView) findViewById(R.id.shimmer_tv);
shimmer.start(shimmerTextView);
}
@Override
public void onPageFinished(WebView view, String url)
{
// TODO hide your progress image
super.onPageFinished(view, url);
Log.i("WEBVIEW", "Loading Done");
shimmer.cancel();
setContentView(R.layout.webview);
}
});
webView.loadUrl(url);
答案 0 :(得分:1)
我很确定您正在实施Shimmer
错误。您不应多次拨打setContentView()
。
你应该这样做:
1)添加包含Fragment
的{{1}}并加载网址。
2)添加WebView
包含Fragment
Shimmer
的{{1}},并在View
Shimmer
中View
后加Fragment
{1}}。
3)当onCreateView()
完成加载后,使用Otto
之类的事件总线让包含WebView
Activity
的{{1}}知道将其删除。