我正在努力使用Google支持库SwipeRefreshLayout
中的文档。
当我使用setOnRefreshListener
设置的回调接收刷新调用时,我会执行操作,之后,我发现我需要再次将刷新状态设置为false - 如果我不这样做,我通过滑动永远不会再触发它!
mSwipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.swipe_refresh_layout);
if (mSwipeRefreshLayout != null) {
mSwipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
Toast.makeText(getApplication(), "Refreshing!", Toast.LENGTH_SHORT).show();
//requestDataRefresh();
mSwipeRefreshLayout.setRefreshing(false);
}
});
}
到目前为止,这么好。但请查看setRefreshing
的文档:
/**
* Notify the widget that refresh state has changed. Do not call this when
* refresh is triggered by a swipe gesture.
*
* @param refreshing Whether or not the view should show refresh progress.
*/
public void setRefreshing(boolean refreshing) {...
但是将刷新状态再次设置为false正是刷新后我必须要做的事情。
文档是错误还是我看错了? 该文件不应该说:“当刷卡手势触发刷新时,不要将刷新状态调用为真”??
您怎么看?
答案 0 :(得分:3)
当您从上到下滑动SwipeRefreshLayout
时,会自动触发setRefreshing(true)
。因此,您不需要反复拨打setRefreshing(true)
。同时,如果您拨打setRefreshing(true)
但不能轻扫SwipeRefreshLayout
,则在您滑动SwipeRefreshLayout
时会看到相同的场景。无论您是从上到下拨打setRefreshing(true)
还是刷卡SwipeRefreshLayout
,都需要在完成任务后致电setRefreshing(false)
。就像您在上面的代码段中所做的那样。
答案 1 :(得分:1)
我认为应该说,如果刷卡是通过滑动手势触发的,则无需将其称为true。
顺便说一句,在某些情况下更新UI时发现了一些问题,这些问题是通过这样包装调用解决的:
private void setRefreshing(final boolean refreshing) {
if (mSwipeRefreshLayout != null) {
mSwipeRefreshLayout.post(new Runnable() {
@Override
public void run() {
mSwipeRefreshLayout.setRefreshing(refreshing);
}
});
}
}