Aspsine / IRecyclerView

IRecyclerView is a custom RecyclerView that supports pull-to-refresh, pull-to-loadmore, customize refresh header and loadmore footer, add header views and footer views.
729 stars 146 forks source link

setRefreshing方法必须放手动post到主线程执行吗? #33

Closed zhangxiann closed 7 years ago

zhangxiann commented 7 years ago

// set auto refreshing iRecyclerView.post(new Runnable() { @Override public void run() { iRecyclerView.setRefreshing(true); } }); 这里的setRefreshing方法必须放手动post到主线程执行吗?我在activity的onCreate方法里面直接调用可以吗?

Aspsine commented 7 years ago

这里不是post到主线线程。而是确保执行refresh 动画的时候view已经完成measure,能拿到正确的宽高信息。

ruijun commented 5 years ago

@Aspsine 你好,新版本有修复这个问题嘛? 如果没有的话,是不是都需要post到消息队列里面,才能正确拿到宽高信息呢。

Aspsine commented 5 years ago

@ruijun 新版本未修复,因为这个不是一个问题。

分情况。 1.在activity的onCreate->onResume这个过程中,view实际上没有measure成功。所以拿不到宽和高,这时候需要post到住线程的消息队列中调用:iRecyclerView.setRefreshing(true); 方法。

2.如果view已经成功加载,界面已经显示出来了。就不需要。 例如:界面上有一个button,点击button,onClick回调中调用 iRecyclerView.setRefreshing(true); 这时候就不需要post。

如果觉得搞不清楚什么时候需要post,什么时候不需要post。每次调用的时候都post就ok。

iRecyclerView.post(new Runnable() {
@override
public void run() {
iRecyclerView.setRefreshing(true);
}
});

觉得每次都post麻烦,可以重写一下iRecyclerView.setRefreshing(true);方法,给super方法加个post。

ruijun commented 5 years ago

@Aspsine OK