SwipeRefreshLayout和刷新状态

时间:2015-04-16 10:55:09

标签: android swiperefreshlayout

我正在努力使用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正是刷新后我必须要做的事情。

文档是错误还是我看错了? 该文件不应该说:“当刷卡手势触发刷新时,不要将刷新状态调用为真”??

您怎么看?

2 个答案:

答案 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);
                }
            });
        }
    }