SwipeRefreshLayout和刷新状态

Zor*_*did 5 android swiperefreshlayout

我正在努力使用SwipeRefreshLayoutGoogle支持库中的文档.

当我使用回调设置接收刷新调用时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);
            }
        });
    }
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好.但请查看以下文档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) {...
Run Code Online (Sandbox Code Playgroud)

但是再次将刷新状态设置为false正是刷新后我必须要做的!

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

你怎么看?

Dam*_*ian 1

我认为它可能应该说,如果刷新是通过滑动手势触发的,则无需用 true 来调用它。

顺便说一句,我在某些情况下更新 UI 时发现了一些问题,这些问题可以通过像这样包装调用来解决:

private void setRefreshing(final boolean refreshing) {
        if (mSwipeRefreshLayout != null) {
            mSwipeRefreshLayout.post(new Runnable() {
                @Override
                public void run() {
                    mSwipeRefreshLayout.setRefreshing(refreshing);
                }
            });
        }
    }
Run Code Online (Sandbox Code Playgroud)