本来想利用progressActivity包裹swipelayout的布局中,swipelayout下拉刷新旧数据的时候,progressActivity.showLoading来隐藏swipelayout的内容布局,但是不如人意,swipe的进度在转,并没有隐藏如下图
于是查看prgressActivity源码的showloading方法会调到这个方法里面
下拉刷新的执行代码如下
if (mSwipeRefreshLayout != null) {
mActivity.runOnUiThread(new Runnable() {
@Override
public void run() {
if(!mSwipeRefreshLayout.isRefreshing())
mSwipeRefreshLayout.setRefreshing(true);
}
});
}
mProgressListener.showLoading();
于是查看prgressActivity源码的showloading方法会调到这个方法里面
private void switchState(State state, Drawable drawable, String errorText, String errorTextContent,
String errorButtonText, View.OnClickListener onClickListener, List<Integer> skipIds) {
this.state = state;
switch (state) {
case CONTENT:
//Hide all state views to display content
hideLoadingView();
hideEmptyView();
hideErrorView();
setContentVisibility(true, skipIds);
break;
case LOADING:
hideEmptyView();//隐藏空布局
hideErrorView();//隐藏错误布局
setLoadingView();//添加loading的布局在最上层
setContentVisibility(false, skipIds);//这个方法来隐藏progressActivity包裹的内容
break;
...//省略代码
}
}
setContentVisibility的方法来隐藏包裹的布局
private void setContentVisibility(boolean visible, List<Integer> skipIds) {
for (View v : contentViews) {
if (!skipIds.contains(v.getId())) {
v.setVisibility(visible ? View.VISIBLE : View.GONE);
}
}
}
通过上面代码查看应该没撒问题呀,理论上是会隐藏progressActivity包裹的的view的呀,于是查阅资料发现在viewGroup的子布局已经有动画在run的情况下有可能
setVisibility是无效的,这个问题还比较棘手暂时还有较好的方案解决,特此记录一下,有时间可以研究View的源码了为什么有动画时会无效,