我试图在 StaggeredGridView 中添加 Scroll 侦听器,我想不出一种方法来添加没有实现的方法,我可以看到
Github url
https://github.com/maurycyw/StaggeredGridView
谢谢
3 回答
这是我尝试解决问题的方法
首先,添加一个私有实例:
private AbsListView.OnScrollListener mOnScrollListener;
添加公共 setOnClickListener 方法:
public void setOnScrollListener (AbsListView.OnScrollListener l) {
mOnScrollListener = l;
}
然后,在 trackMotionScroll 中,添加行来调用侦听器:
private boolean trackMotionScroll(int deltaY, boolean allowOverScroll) {
.
.
.
/* HERE we call onScroll */
if (mOnScrollListener != null) {
mOnScrollListener.onScroll(null, getFirstPosition(), getChildCount(), this.mItemCount);
}
return deltaY == 0 || movedBy != 0;
}
您也可以实现自己的onScrollStateChanged (AbsListView view, int scrollState)
方法,但我懒得这样做:P
最后,您可以调用gridView.setOnScrollListener(listener)
将侦听器传递给 StaggeredGridView
希望能帮助到你。
创建一个继承 SwipeRefreshLayout 的类并重写 canChildScrollUp() 方法来检查 StaggeredGridView 是否到达顶部,如果到达顶部返回 true,否则返回 false。
public class SwipeDownToRefrsh extends SwipeRefreshLayout{
PullToRefreshStaggeredGridView pullToRefreshStaggeredGridView;
public SwipeDownToRefrsh(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
}
public void canChildScrollUp (PullToRefreshStaggeredGridView pullToRefreshStaggeredGridView) {
this.pullToRefreshStaggeredGridView = pullToRefreshStaggeredGridView;
}
@Override
public boolean canChildScrollUp() {
// TODO Auto-generated method stub
if (pullToRefreshStaggeredGridView == null) {
return true;
} else {
return !pullToRefreshStaggeredGridView.getRefreshableView().mGetToTop;
}
}
}
在您的 Activity 或 Fragment 中,只需发送 StaggeredGridView 的瞬间,如下所示:
((SwipeDownToRefrsh)holder.swipeRefreshLayout).canChildScrollUp(holder.staggeredGridView);
我遇到了同样的问题,这就是为什么我自己添加了对滚动监听器的支持,你可以在 github 上找到该项目:https ://github.com/GoMino/StaggeredGridView