关于SwipeRefreshLayout在onCreate中调用setRefreshing()方法时的修改
来源:互联网 发布:xp系统禁止安装软件 编辑:程序博客网 时间:2024/05/21 06:19
对于联网类型的应用,通常我们在进入应用时,需要加载数据,并且提示一个加载的进度条。如果使用官方的下拉刷新控件SwipeRefreshLayout本身是带进度条显示功能的,我们自然会想要重用他的进度条。但是如果你想要在onCreate里把他调出来,直接调用setRefreshing()方法是不行的,如下是setRefreshing()方法的源码:
public void setRefreshing(final boolean refreshing) {
if (refreshing && mRefreshing != refreshing) {
// scale and show
mRefreshing = refreshing;
int endTarget = 0;
if (!mUsingCustomStart) {
endTarget = (int) (mSpinnerFinalOffset + mOriginalOffsetTop);
} else {
endTarget = (int) mSpinnerFinalOffset;
}
setTargetOffsetTopAndBottom(endTarget - mCurrentTargetOffsetTop,
true /* requires update */);
mNotify = false;
startScaleUpAnimation(mRefreshListener);
} else {
setRefreshing(refreshing, false /* notify */);
}
if (refreshing && mRefreshing != refreshing) {
// scale and show
mRefreshing = refreshing;
int endTarget = 0;
if (!mUsingCustomStart) {
endTarget = (int) (mSpinnerFinalOffset + mOriginalOffsetTop);
} else {
endTarget = (int) mSpinnerFinalOffset;
}
setTargetOffsetTopAndBottom(endTarget - mCurrentTargetOffsetTop,
true /* requires update */);
mNotify = false;
startScaleUpAnimation(mRefreshListener);
} else {
setRefreshing(refreshing, false /* notify */);
}
}
查看源码,可以知道,该方法内部主要是调用了setTargetOffsetTopAndBottom()方法调整进度条的位置来显示的。在没出控件完成onLayout方法之前,位置数据都是不准确的,所以显示不出来很正常。
要解决这个问题很简单,把咱们要做的这个事情需要通过post(Runnable runnable)方法放到UI线程排队执行,否则,参数不对,自然显示不出来。
mSwipeRefreshLayout.post(new Runnable() {
@Override
public void run() {
mSwipeRefreshLayout.setRefreshing(true);
}
});
当然,也可以把源码提出来将原方法稍微修改一下,一劳永逸。如下:
/**
* Notify the widget that refresh state has changed. Do not call this when
* refresh is triggered by a swipe gesture.
*
*@paramrefreshing Whether or not the view should show refresh progress.
*/
public void setRefreshing(final boolean refreshing) {
if(refreshing&&mRefreshing!=refreshing) {
post(new Runnable() {
@Override
public void run() {
// scale and show
mRefreshing=refreshing;
int endTarget= 0;
if(!mUsingCustomStart) {
endTarget= (int) (mSpinnerFinalOffset+mOriginalOffsetTop);
}else{
endTarget= (int)mSpinnerFinalOffset;
}
setTargetOffsetTopAndBottom(endTarget-mCurrentTargetOffsetTop,true/*
* requires
* update
*/);
mNotify=false;
startScaleUpAnimation(mRefreshListener);
}
});
}else{
setRefreshing(refreshing,false/* notify */);
}
* refresh is triggered by a swipe gesture.
*
*@paramrefreshing Whether or not the view should show refresh progress.
*/
public void setRefreshing(final boolean refreshing) {
if(refreshing&&mRefreshing!=refreshing) {
post(new Runnable() {
@Override
public void run() {
// scale and show
mRefreshing=refreshing;
int endTarget= 0;
if(!mUsingCustomStart) {
endTarget= (int) (mSpinnerFinalOffset+mOriginalOffsetTop);
}else{
endTarget= (int)mSpinnerFinalOffset;
}
setTargetOffsetTopAndBottom(endTarget-mCurrentTargetOffsetTop,true/*
* requires
* update
*/);
mNotify=false;
startScaleUpAnimation(mRefreshListener);
}
});
}else{
setRefreshing(refreshing,false/* notify */);
}
}
0 0
- 关于SwipeRefreshLayout在onCreate中调用setRefreshing()方法时的修改
- SwipeRefreshLayout在onCreate使用setRefreshing(true)无效
- 解决Popupwindowon在onCreate方法中调用出现的错误
- Android SwipeRefreshLayout.setRefreshing(false)无效的解决办法
- onCreate方法中调用PopupWindow的错误
- 关于在onCreate()方法中定义变量和在方法体外定义变量的区别
- 关于(WTL),怎么在OnCreate中调用DwmExtendFrameIntoClientArea()这个API(vista系统的毛玻璃效果)
- AndroidGUI28:在onCreate方法中两次调用setContentView
- 在oncreate/onstart事件中不要调用startActivityForResult方法
- AndroidGUI28:在onCreate方法中两次调用setContentView
- 【ANDROID】Android 在oncreate() 方法中调用 findViewById 返回 null 问题的原因和解决方法
- [android]关于SQLiteOpenHelper的onCreate(SQLiteDatabase db)方法调用时机
- 手动设置SwipeRefreshLayout的setRefreshing(true)遇到的问题
- SwipeRefreshLayout,设置setRefreshing(true)没效果的解决方案
- Android SwipeRefreshLayout的 swipe.setRefreshing(true)无法自动刷新问题
- 在CMainFrame::OnCreate中调用SetWindowText无效果的原因
- Sqlite中DbOpenHelper的onCreate方法不能被调用
- 关于Activity中onCreate()方法执行两次的问题
- 使用Storm实现实时大数据分析
- Android之CharSequence类型
- 在Windows 8中使用传统风格语言栏
- ListView优化
- 第十三周项目三之成绩处理函数版
- 关于SwipeRefreshLayout在onCreate中调用setRefreshing()方法时的修改
- 自来水净化设备:直饮净化水设备工作原理及安装事项
- C语言的malloc、calloc、realloc
- Andorid 屏幕适配
- 最速下降优化算法与共轭梯度算法
- 网络安全相关站点
- LeetCode[Hash Table]: Two Sum
- 开始使用Mac OS X——写给Mac新人
- android 事件传递机制