永发信息网

怎样实现SwipeRefreshLayout的自动刷新

答案:3  悬赏:40  手机版
解决时间 2021-03-17 01:39
怎样实现SwipeRefreshLayout的自动刷新
最佳答案
首先想要在界面一加载的时候出现更新效果,直接调用setRfreshing(true)是出不来效果的,这个问题我以前也遇到过,必须调用
SwipeRefreshLayout.post(new Runable(){
@Override
public void run() {
SwipeRefreshLayout.setRefreshing(true);
}
});

关闭的时候也使用
SwipeRefreshLayout.post(new Runable(){
@Override
public void run() {
SwipeRefreshLayout.setRefreshing(false);
}
});
但是如果你认为这样就会走onRefresh方法,那你就大错特错了,setRefreshing(true)是不会触发onRefresh的,必须要手动调用一次
所以在界面onCreate里面想要立刻加载就需要这样

SwipeRefreshLayout.post(new Runable(){
@Override
public void run() {
SwipeRefreshLayout.setRefreshing(true);
}
});
onRefresh();
全部回答
上代码
@Override
public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
if (mTarget == null) {
ensureTarget();
}
if (mTarget == null) {
return;
}
mTarget.measure(MeasureSpec.makeMeasureSpec(
getMeasuredWidth() - getPaddingLeft() - getPaddingRight(),
MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(
getMeasuredHeight() - getPaddingTop() - getPaddingBottom(), MeasureSpec.EXACTLY));
mCircleView.measure(MeasureSpec.makeMeasureSpec(mCircleWidth, MeasureSpec.EXACTLY),
MeasureSpec.makeMeasureSpec(mCircleHeight, MeasureSpec.EXACTLY));
if (!mUsingCustomStart && !mOriginalOffsetCalculated) {
mOriginalOffsetCalculated = true;
mCurrentTargetOffsetTop = mOriginalOffsetTop = -mCircleView.getMeasuredHeight();
}
mCircleViewIndex = -1;
// Get the index of the circleview.
for (int index = 0; index < getChildCount(); index++) {
if (getChildAt(index) == mCircleView) {
mCircleViewIndex = index;
break;
}
}
}
如代码所见,是在onMeasure里获取的,根据CircleView的高度来赋值的。
所以要解决的方法是让mOriginalOffsetTop能在setRefreshing前正确赋值。比较笨的方法是在onCreate里或onCreateView手动赋值,不推荐。
正确做法是在onMeasure触发后再调用setRefreshing。
代码如下:
root.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
root.getViewTreeObserver().removeGlobalOnLayoutListener(this);
mRefreshLayout.setRefreshing(true);
loadData(true);
}
});
其它的下拉刷新库也有类似问题,关键变量需要在onMeasure里获取。也无法显示到正确的位置。类似其它自定义控件需要在控件没有度量好,先调用涉及到相关变量的方法,都可以类似解决。
首先想要在界面一加载的时候出现更新效果,直接调用setRfreshing(true)是出不来效果的,这个问题我以前也遇到过,必须调用
SwipeRefreshLayout.post(new Runable(){
@Override
public void run() {
SwipeRefreshLayout.setRefreshing(true);
}
});
关闭的时候也使用
SwipeRefreshLayout.post(new Runable(){
@Override
public void run() {
SwipeRefreshLayout.setRefreshing(false);
}
});
但是如果你认为这样就会走onRefresh方法,那你就大错特错了,setRefreshing(true)是不会触发onRefresh的,必须要手动调用一次
所以在界面onCreate里面想要立刻加载就需要这样
SwipeRefreshLayout.post(new Runable(){
@Override
public void run() {
SwipeRefreshLayout.setRefreshing(true);
}
});
onRefresh();
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
货车车管所只配发一张临时牌照吗
去英国留学生活的一些常识和所需准备的日常用
14号有哪些球员
从澳大利亚寄到中国的邮政快递 单号rr3517781
湖滨花园地址在什么地方,想过去办事
有谁跟我一样,觉得《悟空传》的最后余文乐演
和男朋友第一次接吻,他用的是舌吻,这个有什
做商城网站需要多少钱
三个人搭伙做生意,他俩是情人关系我怎么处理
军粮城到磁山多少公里
笔记本vga接口有什么用
为什么手机屏幕上几个加速的圆圈,消不去
金昌公寓怎么去啊,有知道地址的么
华擎wolfdale1333 d667主板配什么处理器好啊
iphone怎么关闭日历收件箱
推荐资讯
遇见讨厌的亲戚不想打招呼怎么办?
智慧类修仙小说 打斗少点 求道多点
2017年5月6日无锡社保局上班吗?急……
天涯明月刀OL除了每天做日常外还怎么获取阅历
987除以43怎么分拆计算了?
阳春市春湾镇清水塘小学这个地址在什么地方,
辉阳花行怎么去啊,我要去那办事
小米3屏幕失灵,重启就好,一锁屏就没法用
本人HTC G3 自己用91助手刷机了2.1版本的安卓
雅阁门窗在什么地方啊,我要过去处理事情
现在怎么老是有人说,我请你吃麻辣烫,什么意
和讯理财客安全吗?为什么显示操作失败
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?