检查 Android Gridview 是否滚动到顶部

5

我想确定我的Gridview是否滚动到了顶部。

现在我正在使用getChildAt(0).getTop()来实现这个目标。我会在第一次绘制时保存getChildAt(0).getTop()的值,并在随后的绘制中将其与getChildAt(0).getTop()进行比较。

然而,这似乎有些hacky,有时候会给我不正确的结果。

有更好的想法吗?

4个回答

1
尝试使用 onScrollListener
setOnScrollListener(this);

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

    if(firstVisibleItem == 0){
        //do stuff here
    }

}

如果第一项可见,并不意味着GridView已经滚动到顶部。 - user468311

0
这是我的回答:
mLayoutManager = new GridLayoutManager(getActivity(), 2);
mListRV= (RecyclerView).findViewById(R.id.list_rv);
mListRV.setLayoutManager(mLayoutManager);

mListRV.setOnScrollListener(new RecyclerView.OnScrollListener() {
                @Override
                public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
                    if (newState == RecyclerView.SCROLL_STATE_IDLE) {
                        View v = mLayoutManager.getChildAt(0);
                        int offsetTop = v.getTop();
                        int offsetBottom = v.getBottom();
                        int height = (offsetBottom - offsetTop);
                        if(offsetTop >= -height/2) {
                            mListRV.smoothScrollBy(0, offsetTop);
                        } else {
                            mListRV.smoothScrollBy(0, height + offsetTop);
                        }
                    } 
                }
            });

0

希望这能帮到你,对我很有效,祝好运。

yourGridView.setOnScrollListener(new OnScrollListener() { @Override public void onScrollStateChanged(AbsListView view, int scrollState) { if(SCROLL_STATE_IDLE == scrollState) { View view = view.getChildAt(0); if(view != null) { float y = view.getY(); Log.d("Tag", "第一个视图的 Y 坐标是 " + y); if(y == 0) { // 做你想做的 } } } }


0

getChildAt(0) 方法会返回 GridView 中第一个可见的项,但我猜这不是你想要的。

如果你使用 yourGridView.getFirstVisiblePosition() 方法,它会返回你的数据适配器中第一个可见位置,这才是你想要的。


嗯,我不明白你的GridView.getFirstVisiblePosition()如何给我想要的结果,除非我误解了“可见”。如果第二行是第一行可见,那么我想要编写的整体方法——isGridScrolledToTop()——应该返回false。在这种情况下,它应该返回false,因为网格没有滚动到顶部。(它滚动到了第二行。) - user1435114
这并不是很准确,我发现。 - JMRboosties

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接