怎么用安卓手机刷机swip

当前【安卓手机】
全部安卓手机安卓平板安卓电视iPhoneiPad其他
当前位置:>>>SwiP智能情景切换安卓版
如果您正把手机连着电脑,欢迎点击
热门排行榜
1615万+人在玩78万+人在玩487万+人在玩88万+人在玩175万+人在玩555万+人在玩
SwiP智能情景切换app相关推荐
发现该应用有下载安装使用错误或恶意扣费携带病毒,请
版权所有 京ICP备号-5
京公网安备 50 备回家写 mark 20:40 更新首先想要在界面一加载的时候出现更新效果,直接调用setRfreshing(true)是出不来效果的,这个问题我以前也遇到过,必须调用 SwipeRefreshLayout.post(new Runable(){
public void run() {
SwipeRefreshLayout.setRefreshing(true);
}});关闭的时候也使用SwipeRefreshLayout.post(new Runable(){
public void run() {
SwipeRefreshLayout.setRefreshing(false);
}});但是如果你认为这样就会走onRefresh方法,那你就大错特错了,setRefreshing(true)是不会触发onRefresh的,必须要手动调用一次所以在界面onCreate里面想要立刻加载就需要这样SwipeRefreshLayout.post(new Runable(){
public void run() {
SwipeRefreshLayout.setRefreshing(true);
}});onRefresh(); 21:55 更新初始化:OnRefreshListener listener = new OnRefreshListener(){
public void onRefresh(){
SwipeRefreshLayout mSRLayout = (SwipeRefreshLayout) findviewbyId(R.id.layout);
mSRLayout.setOnRefreshListener(listener);
onCreate中:mSRLayout.post(new Runable(){
public void run() {
SwipeRefreshLayout.setRefreshing(true);
listener.onRefresh()
看了几个回答,都没有回答到点子上,走了弯路.&br&&br&先解释下为什么setRefreshing没有作用&br&
public void setRefreshing(boolean refreshing) {&br&
if (refreshing && mRefreshing != refreshing) {&br&
// scale and show&br&
mRefreshing =&br&
int endTarget = 0;&br&
if (!mUsingCustomStart) {&br&
endTarget = (int) (mSpinnerFinalOffset + &b&mOriginalOffsetTop&/b&);&br&
} else {&br&
endTarget = (int) mSpinnerFinalO&br&
setTargetOffsetTopAndBottom(endTarget - mCurrentTargetOffsetTop,&br&
true /* requires update */);&br&
mNotify =&br&
startScaleUpAnimation(mRefreshListener);&br&
} else {&br&
setRefreshing(refreshing, false /* notify */);&br&
} &br&在onCreate里或onCreateView里调用setRefreshing,这个时候&b&关键变量mOriginalOffsetTop并没有获取正确的值。下拉效果动画过程中没有显示到正确的坐标,&/b&我们看看这个值是什么时候获取的,上代码&br&
@Override&br&
public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {&br&
super.onMeasure(widthMeasureSpec, heightMeasureSpec);&br&
if (mTarget == null) {&br&
ensureTarget();&br&
if (mTarget == null) {&br&&br&
mTarget.measure(MeasureSpec.makeMeasureSpec(&br&
getMeasuredWidth() - getPaddingLeft() - getPaddingRight(),&br&
MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(&br&
getMeasuredHeight() - getPaddingTop() - getPaddingBottom(), MeasureSpec.EXACTLY));&br&
mCircleView.measure(MeasureSpec.makeMeasureSpec(mCircleWidth, MeasureSpec.EXACTLY),&br&
MeasureSpec.makeMeasureSpec(mCircleHeight, MeasureSpec.EXACTLY));&br&&b&
if (!mUsingCustomStart && !mOriginalOffsetCalculated) {&br&
mOriginalOffsetCalculated =&br&&u&mCurrentTargetOffsetTop = mOriginalOffsetTop = -mCircleView.getMeasuredHeight();&br&&/u&
}&br&&/b&&br&
mCircleViewIndex = -1;&br&
// Get the index of the circleview.&br&
for (int index = 0; index & getChildCount(); index++) {&br&
if (getChildAt(index) == mCircleView) {&br&
mCircleViewIndex =&br& &br&
} &br&如代码所见,是在onMeasure里获取的,根据CircleView的高度来赋值的。&br&&br&所以要解决的方法是让&b&mOriginalOffsetTop能在&/b&setRefreshing前正确赋值。比较笨的方法是在onCreate里或onCreateView手动赋值,不推荐。&br&正确做法是在onMeasure触发后再调用setRefreshing。&br&代码如下:&br&
root.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {&br&
@Override&br&
public void onGlobalLayout() {&br&
root.getViewTreeObserver().removeGlobalOnLayoutListener(this);&br&
mRefreshLayout.setRefreshing(true);&br&
loadData(true);&br&
}); &br&&br&其它的下拉刷新库也有类似问题,关键变量需要在onMeasure里获取。也无法显示到正确的位置。&b&类似其它自定义控件需要在控件没有度量好,先调用涉及到相关变量的方法&/b&,都可以类似解决。
看了几个回答,都没有回答到点子上,走了弯路. 先解释下为什么setRefreshing没有作用 public void setRefreshing(boolean refreshing) { if (refreshing && mRefreshing != refreshing) { // scale and show mRefreshing = int endTarget = 0; …
谢邀。&br&本来在onCreate里面调用SwipeRefreshLayout.setRefreshing(ture,true)即可,但是,这个Api是私有的。&br&所以只能用&b&反射&/b&或者&b&手动调SwipeRefreshLayout.setRefreshing(true)+RefreshLayout.OnRefreshListener.onRefresh方法&/b&。&br&反射代码如下:&br&&div class=&highlight&&&pre&&code class=&language-js&&&span class=&kr&&public&/span& &span class=&kr&&static&/span& &span class=&k&&void&/span& &span class=&nx&&setRefreshing&/span&&span class=&p&&(&/span&&span class=&nx&&SwipeRefreshLayout&/span& &span class=&nx&&refreshLayout&/span&&span class=&p&&,&/span&&span class=&kr&&boolean&/span& &span class=&nx&&refreshing&/span&&span class=&p&&,&/span& &span class=&kr&&boolean&/span& &span class=&nx&&notify&/span&&span class=&p&&){&/span&
&span class=&nx&&Class&/span&&span class=&o&&&?&/span& &span class=&kr&&extends&/span& &span class=&nx&&SwipeRefreshLayout&/span&&span class=&o&&&&/span& &span class=&nx&&refreshLayoutClass&/span& &span class=&o&&=&/span& &span class=&nx&&refreshLayout&/span&&span class=&p&&.&/span&&span class=&nx&&getClass&/span&&span class=&p&&();&/span&
&span class=&k&&if&/span& &span class=&p&&(&/span&&span class=&nx&&refreshLayoutClass&/span& &span class=&o&&!=&/span& &span class=&kc&&null&/span&&span class=&p&&)&/span& &span class=&p&&{&/span&
&span class=&k&&try&/span& &span class=&p&&{&/span&
&span class=&nx&&Method&/span& &span class=&nx&&setRefreshing&/span& &span class=&o&&=&/span& &span class=&nx&&refreshLayoutClass&/span&&span class=&p&&.&/span&&span class=&nx&&getDeclaredMethod&/span&&span class=&p&&(&/span&&span class=&s2&&&setRefreshing&&/span&&span class=&p&&,&/span& &span class=&kr&&boolean&/span&&span class=&p&&.&/span&&span class=&kr&&class&/span&&span class=&p&&,&/span& &span class=&kr&&boolean&/span&&span class=&p&&.&/span&&span class=&kr&&class&/span&&span class=&p&&);&/span&
&span class=&nx&&setRefreshing&/span&&span class=&p&&.&/span&&span class=&nx&&setAccessible&/span&&span class=&p&&(&/span&&span class=&kc&&true&/span&&span class=&p&&);&/span&
&span class=&nx&&setRefreshing&/span&&span class=&p&&.&/span&&span class=&nx&&invoke&/span&&span class=&p&&(&/span&&span class=&nx&&refreshLayout&/span&&span class=&p&&,&/span& &span class=&nx&&refreshing&/span&&span class=&p&&,&/span& &span class=&nx&&notify&/span&&span class=&p&&);&/span&
&span class=&p&&}&/span& &span class=&k&&catch&/span& &span class=&p&&(&/span&&span class=&nx&&NoSuchMethodException&/span& &span class=&nx&&e&/span&&span class=&p&&)&/span& &span class=&p&&{&/span&
&span class=&nx&&e&/span&&span class=&p&&.&/span&&span class=&nx&&printStackTrace&/span&&span class=&p&&();&/span&
&span class=&p&&}&/span& &span class=&k&&catch&/span& &span class=&p&&(&/span&&span class=&nx&&IllegalAccessException&/span& &span class=&nx&&e&/span&&span class=&p&&)&/span& &span class=&p&&{&/span&
&span class=&nx&&e&/span&&span class=&p&&.&/span&&span class=&nx&&printStackTrace&/span&&span class=&p&&();&/span&
&span class=&p&&}&/span& &span class=&k&&catch&/span& &span class=&p&&(&/span&&span class=&nx&&InvocationTargetException&/span& &span class=&nx&&e&/span&&span class=&p&&)&/span& &span class=&p&&{&/span&
&span class=&nx&&e&/span&&span class=&p&&.&/span&&span class=&nx&&printStackTrace&/span&&span class=&p&&();&/span&
&span class=&p&&}&/span&
&span class=&p&&}&/span&
&span class=&p&&}&/span&
&/code&&/pre&&/div&然后调用setRefreshing(mRefreshLayout,true,true)即可。&br&反射请在Proguard里面屏蔽掉setRefreshing,代码如下&br&&div class=&highlight&&&pre&&code class=&language-text&&
-keepclassmembers android.support.v4.widget.SwipeRefreshLayout{
private void setRefreshing(boolean,boolean);
&/code&&/pre&&/div&&br&以上两种方法注意进行延时(应该算是一个bug吧&a href=&///?target=https%3A///p/android/issues/detail%3Fid%3D77712& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&/p/andro&/span&&span class=&invisible&&id/issues/detail?id=77712&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&),参考 &a data-hash=&0bf37b611eb9e& href=&///people/0bf37b611eb9e& class=&member_mention& data-editable=&true& data-title=&@贾艺驰& data-hovercard=&p$b$0bf37b611eb9e&&@贾艺驰&/a& 提供的方式 &a href=&/question//answer/& class=&internal&&怎样实现SwipeRefreshLayout的自动刷新?类似知乎安卓版一打开页面就自动刷新加载的效果。 - 贾艺驰的回答&/a&。&br&&br&知乎会自动缓存第一页HTTP数据,每次打开时会把缓存先展示出来,然后再去接口请求数据,同时设置SwipeRefreshLayout的自动刷新,数据到了,把缓存替换掉,同时设置SwipeRefreshLayout.setRefreshing(false)。
谢邀。 本来在onCreate里面调用SwipeRefreshLayout.setRefreshing(ture,true)即可,但是,这个Api是私有的。 所以只能用反射或者手动调SwipeRefreshLayout.setRefreshing(true)+RefreshLayout.OnRefreshListener.onRefresh方法。 反射代码如下: public sta…
已有帐号?
无法登录?
社交帐号登录Android(65)
我们来看SwipeRefreshLayout的具体用法,顾名思义此组件就是一个布局,只不过要注意的是此布局内只能有一个直接子View。其实通过文档我们可以知道SwipeRefreshLayout只不过是继承了ViewGroup。
 查看文档,我们可以知道,在SwipRefreshLayout中存在一个接口,通过此接口我们可以监听滑动手势,其实使用此组件最重要的步骤就是实现此接口的onRefresh方法,在此方法中实现数据的更新操作。如下:
接口中的方法:
 除了OnRefreshListener接口外,SwipRefreshLayout中还有一些其他重要的方法,具体如下:
& & & & &1、setOnRefreshListener(SwipeRefreshLayout.OnRefreshListener listener):设置手势滑动监听器。
&&&&&&&& 2、setProgressBackgroundColor(int colorRes):设置进度圈的背景色。
&&&&&&&& 3、setColorSchemeResources(int… colorResIds):设置进度动画的颜色。
&&&&&&&& 4、setRefreshing(Boolean refreshing):设置组件的刷新状态。
&&&&&&&& 5、setSize(int size):设置进度圈的大小,只有两个值:DEFAULT、LARGE。
下面我们通过一个实例来看一下具体怎么用
1.main.xml:
2.list_item.xml:
3.ItemInfo.java:
4.ListViewAdapter.java:
5.MainActivity.java:
6.运行实例如下:
1.此布局内只能有一个直接子View;
2.setOnRefreshListener(SwipeRefreshLayout.OnRefreshListener listener):设置手势滑动监听器;
3.覆写public void onRefresh()。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:168446次
积分:3990
积分:3990
排名:第5789名
原创:151篇
转载:548篇
评论:11条
细节决定成败,
态度决定一切。
文章:32篇
阅读:7455
(2)(6)(2)(24)(32)(31)(1)(6)(108)(7)(25)(232)(65)(12)(2)(2)(6)(2)(4)(21)(120)怎样实现SwipeRefreshLayout的自动刷新?类似知乎安卓版一打开页面就自动刷新加载的效果。
看了几个回答,都没有回答到点子上,走了弯路.先解释下为什么setRefreshing没有作用
public void setRefreshing(boolean refreshing) {
if (refreshing && mRefreshing != refreshing) {
// scale and show
mRefreshing =
int endTarget = 0;
if (!mUsingCustomStart) {
endTarget = (int) (mSpinnerFinalOffset + mOriginalOffsetTop);
endTarget = (int) mSpinnerFinalO
setTargetOffsetTopAndBottom(endTarget - mCurrentTargetOffsetTop,
true /* requires update */);
startScaleUpAnimation(mRefreshListener);
setRefreshing(refreshing, false /* notify */);
} 在onCreate里或onCreateView里调用setRefreshing,这个时候关键变量mOriginalOffsetTop并没有获取正确的值。下拉效果动画过程中没有显示到正确的坐标,我们看看这个值是什么时候获取的,上代码
public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
if (mTarget == null) {
ensureTarget();
if (mTarget == null) {
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 =mCurrentTargetOffsetTop = mOriginalOffsetTop = -mCircleView.getMeasuredHeight();
mCircleViewIndex = -1;
// Get the index of the circleview.
for (int index = 0; index & getChildCount(); index++) {
if (getChildAt(index) == mCircleView) {
mCircleViewIndex =
} 如代码所见,是在onMeasure里获取的,根据CircleView的高度来赋值的。所以要解决的方法是让mOriginalOffsetTop能在setRefreshing前正确赋值。比较笨的方法是在onCreate里或onCreateView手动赋值,不推荐。正确做法是在onMeasure触发后再调用setRefreshing。代码如下:
root.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
public void onGlobalLayout() {
root.getViewTreeObserver().removeGlobalOnLayoutListener(this);
mRefreshLayout.setRefreshing(true);
loadData(true);
}); 其它的下拉刷新库也有类似问题,关键变量需要在onMeasure里获取。也无法显示到正确的位置。类似其它自定义控件需要在控件没有度量好,先调用涉及到相关变量的方法,都可以类似解决。
谢邀。本来在onCreate里面调用SwipeRefreshLayout.setRefreshing(ture,true)即可,但是,这个Api是私有的。所以只能用反射或者手动调SwipeRefreshLayout.setRefreshing(true)+RefreshLayout.OnRefreshListener.onRefresh方法。反射代码如下:public static void setRefreshing(SwipeRefreshLayout refreshLayout,boolean refreshing, boolean notify){
Class&? extends SwipeRefreshLayout& refreshLayoutClass = refreshLayout.getClass();
if (refreshLayoutClass != null) {
Method setRefreshing = refreshLayoutClass.getDeclaredMethod("setRefreshing", boolean.class, boolean.class);
setRefreshing.setAccessible(true);
setRefreshing.invoke(refreshLayout, refreshing, notify);
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
然后调用setRefreshing(mRefreshLayout,true,true)即可。反射请在Proguard里面屏蔽掉setRefreshing,代码如下
-keepclassmembers android.support.v4.widget.SwipeRefreshLayout{
private void setRefreshing(boolean,boolean);
以上两种方法注意进行延时(应该算是一个bug吧),参考
提供的方式 。知乎会自动缓存第一页HTTP数据,每次打开时会把缓存先展示出来,然后再去接口请求数据,同时设置SwipeRefreshLayout的自动刷新,数据到了,把缓存替换掉,同时设置SwipeRefreshLayout.setRefreshing(false)。
回家写 mark 20:40 更新首先想要在界面一加载的时候出现更新效果,直接调用setRfreshing(true)是出不来效果的,这个问题我以前也遇到过,必须调用 SwipeRefreshLayout.post(new Runable(){
public void run() {
SwipeRefreshLayout.setRefreshing(true);
}});关闭的时候也使用SwipeRefreshLayout.post(new Runable(){
public void run() {
SwipeRefreshLayout.setRefreshing(false);
}});但是如果你认为这样就会走onRefresh方法,那你就大错特错了,setRefreshing(true)是不会触发onRefresh的,必须要手动调用一次所以在界面onCreate里面想要立刻加载就需要这样SwipeRefreshLayout.post(new Runable(){
public void run() {
SwipeRefreshLayout.setRefreshing(true);
}});onRefresh(); 21:55 更新初始化:OnRefreshListener listener = new OnRefreshListener(){
public void onRefresh(){
SwipeRefreshLayout mSRLayout = (SwipeRefreshLayout) findviewbyId(R.id.layout);
mSRLayout.setOnRefreshListener(listener);
onCreate中:mSRLayout.post(new Runable(){
public void run() {
SwipeRefreshLayout.setRefreshing(true);
listener.onRefresh()
SwipeRefreshLayout 不刷新的主要原因是onCreate中控件还没有初始化,直接使用,这个等同于Handler的,他会在View初始化完成后调用Runable的东西 swipeRefreshLayout.post(new Runnable() {
public void run() {
swipeRefreshLayout.setRefreshing(true);
能问一下,为什么在刷新的回调中,请求网络数据,会引起界面的重绘呢?
我以前写过的程序是这样实现的,就是在onCreate函数末尾放入这句new Handler().postDelayed(new Runnable() {
if(!offline()) {
mRefreshIndicator.setRefreshing(true);
}, 500); //延迟500ms执行
也可以试着这么做一下,就是重载Activity的onWindowFocusChanged(boolean hasFocus)方法。不过我没试过,我觉得应该也可以。public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
if(hasFocus) {
if(!offline()) {
mRefreshIndicator.setRefreshing(true);
直接调用onRefresh();就可以了
已有帐号?
无法登录?
社交帐号登录}

我要回帖

更多关于 安卓手机刷机教程 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信