问题描述
使用SwipeRefreshLayout的时,由于刚进入到那个界面的时候要刷新,但是设置setRefreshing(true)并没效果。
原因分析
调用refresh.setRefreshing(true);过早,以至于我们的SwipeRefreshLayout还没有被测量就已经被调用。
解决方案
方案一
swipeRefreshLayout.setProgressViewOffset(false, 0, 100);
swipeRefreshLayout.setRefreshing(true);
onRefresh();
方案二
view.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
@Override
public boolean onPreDraw() {
swipeRefreshLayout.setRefreshing(true);
onRefresh();
view.getViewTreeObserver().removeOnPreDrawListener(this);
return true;
}
});
方案三
view.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
swipeRefreshLayout.setRefreshing(true);
onRefresh();
view.getViewTreeObserver().removeOnGlobalLayoutListener(this);
}
});
注:
方案二和方案三种的view是swipeRefreshLayout的顶层布局。
在Android开发中,遇到SwipeRefreshLayout设置刷新状态不起作用的问题,原因是调用setRefreshing(true)过早。文中提供了三种解决方案,帮助开发者解决这个问题。

314

被折叠的 条评论
为什么被折叠?



