如何使用GridView/ListView实现SwipeRefreshLayout而不会截断视图?

egi*_*112 1 android listview gridview

如果我没有将OnScrollListener设置为如下所示,则在滚动到列表底部然后向上滚动后,ListView中的顶视图会被切断.

如下设置OnScrollListener似乎可行,但这似乎很奇怪,这是必需的.我希望Google能够修复此问题,而无需设置此监听器.有任何想法吗?

    mListView.setOnScrollListener(new OnScrollListener() {

        @Override
        public void onScrollStateChanged(AbsListView view, int scrollState) {
        }

        @Override
        public void onScroll(AbsListView absListView, int firstVisibleItem, int visibleItemCount, int totalItemCount) {

            if (firstVisibleItem == 0 && visibleItemCount > 0 && absListView.getChildAt(0).getTop() >= 0) {
                mSwipeToRefreshLayout.setEnabled(true);
            } else {
                mSwipeToRefreshLayout.setEnabled(false);
            }
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

Rax*_*Rax 8

我遇到了类似的情况,并且重写canChildScrollUp方法为我修复了它.当您使用SwipeRefreshLayout包含a ListViewGridViewid 时,只需使用以下内容即可android.R.id.list.

import android.content.Context;
import android.support.v4.widget.SwipeRefreshLayout;
import android.util.AttributeSet;


/**
 * Date: 09/02/2014
 * @author: rax
 */
public class ScrollableSwipeRefreshLayout extends SwipeRefreshLayout {

    public ScrollableSwipeRefreshLayout(Context context) {
        super(context);
    }

    public ScrollableSwipeRefreshLayout(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    public boolean canChildScrollUp() {
        // Condition to check whether scrollview reached at the top while scrolling or not
        return findViewById(android.R.id.list).canScrollVertically(-1);
    }
}
Run Code Online (Sandbox Code Playgroud)