Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

DefaultCallback 调用时机有问题 #162

Open
junchenChow opened this issue Feb 8, 2021 · 3 comments
Open

DefaultCallback 调用时机有问题 #162

junchenChow opened this issue Feb 8, 2021 · 3 comments

Comments

@junchenChow
Copy link

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

@WinWang
Copy link

WinWang commented Feb 15, 2021

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

@WinWang
Copy link

WinWang commented Feb 21, 2021

不考虑在界面延迟调用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);
}

}

@ILoveYouCC
Copy link

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants