LoadSir icon indicating copy to clipboard operation
LoadSir copied to clipboard

DefaultCallback 调用时机有问题

Open junchenChow opened this issue 4 years ago • 3 comments

在viewpager中出现几率很高,或者在网络请求返回特别快的时候,第一次callback是我手动触发的例如emptyCallback 或者 errorCallback,但是调用之后发现还是在loadingCallback的状态。 打断点发现我先是调用了自己的callback,然后紧接着默认callback在我调用之后才开始,就导致了我的界面一直是loading状态。 看一下是不是handler post的机制有问题

junchenChow avatar Feb 08 '21 10:02 junchenChow

同+1,可以直接在调用showSuccess的回调能复现,不必等网络请求,如果初始化快速调用切换会状态失效

WinWang avatar Feb 15 '21 16:02 WinWang

不考虑在界面延迟调用callback得情况下,暂时通过修改框架源码解决这个问题得方法是在LoadService中得initCallBack得方法中将设置defaultCallBack得方法中的Handler post设置直接去掉,直接调用即可 private void initCallback(LoadSir.Builder builder) { List callbacks = builder.getCallbacks(); final Class<? extends Callback> defalutCallback = builder.getDefaultCallback(); if (callbacks != null && callbacks.size() > 0) { for (Callback callback : callbacks) { loadLayout.setupCallback(callback); } } // new Handler().post(new Runnable() { // @override // public void run() { // if (defalutCallback != null) { // loadLayout.showCallback(defalutCallback); // } // } // });

/**
 * 省去Handler调用,不需要使用Handler发送,直接调用即可
 */
if (defalutCallback != null) {
    loadLayout.showCallback(defalutCallback);
}

}

WinWang avatar Feb 21 '21 05:02 WinWang

https://www.jianshu.com/p/223be1d48f8a 我也出现了这个问题,不过原因知道了。上面讲的很好。 Handler的post方法至少要在onResume方法之后执行。我就是在onResume里面loading,第一次咋个都不显示。 上面大哥的方法可以解决。

ILoveYouCC avatar Nov 03 '21 03:11 ILoveYouCC