Android网格视图OnScrollListener滚动上下事件

7

我有一个GridView,需要完成两个任务:

当我向下滚动时,想要找到最后可见的位置。例如:int index = GridView.getLastVisiblePosition();

当我向上滚动时,想要找到第一个可见的位置。例如:int index = GridView.getFirstVisiblePosition();

我知道我可以使用以下代码,但不确定如何在哪里编写ScrollUp和ScrollDown的代码。请帮助我,我是Android新手。

private OnScrollListener onAnswersScrolled = new OnScrollListener() {

    @Override
    public void onScrollStateChanged(AbsListView view, int scrollState) {
    }
}
2个回答

23
在您的活动中创建全局变量 myLastVisiblePos ,并为每个 FirstVisiblePosition 保存。在onScroll事件检查当前的 FirstVisiblePosition 与您保存的 FirstVisiblePosition 进行比较,如果大于您最后保存的 FirstVisiblePosition 则向上滚动,如果小于则向下滚动。
int myLastVisiblePos;// global variable of activity

//save first value when you create GridView
GridView gridView = (GridView) gv.findViewById(R.id.grid_view);
myLastVisiblePos = gridView.getFirstVisiblePosition();

gridView.setOnScrollListener( new OnScrollListener() {
    @Override
    public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
            int currentFirstVisPos = view.getFirstVisiblePosition();
            if(currentFirstVisPos > myLastVisiblePos) {
                //scroll down
            }
            if(currentFirstVisPos < myLastVisiblePos) {
                //scroll up
            }
            myLastVisiblePos = currentFirstVisPos;
    }
});

非常感谢。我一定会尝试这个选项。在我的屏幕上,如果我滚动一点,我可以同时看到第一个和最后一个可见位置。我想我可能需要进行更改。 - Shri Ksai
非常感谢。我一定会尝试这个选项。如果我在屏幕上向上或向下滚动一点,我可以同时看到第一个和最后一个可见位置。如果我向下滚动并将其留在中间,我想在屏幕上显示lastvisible位置,如果我向上滚动,我想在屏幕上显示firstvisible位置。我想我可能需要将myLastVisiblePos = GridView.getFirstVisiblePosition();更改为myLastVisiblePos = GridView.getLastVisiblePosition();否则我将在第一个if语句中比较1 = 1。请帮忙。 - Shri Ksai
Shri Ksai,我真的不明白你的问题,你可以添加一张截图让我了解你想要什么,发送到我的电子邮件。 - SBotirov
超棒的答案!+1 - Manann Sseth
非常感谢,答案太棒了。+1 - AnilPatel
它可以检测到在一个项目或第一行向上滚动后向上或向下滚动,但无法检测紧急滚动。 - Mayur R. Amipara

2

尝试这段代码,可能对您有所帮助...

GridView gridView = (GridView) gv.findViewById(R.id.grid_view);
gridView.setOnScrollListener(new OnScrollListener() {

        @Override
        public void onScrollStateChanged(AbsListView view, int scrollState) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onScroll(AbsListView view, int firstVisibleItem,
                int visibleItemCount, int totalItemCount) {
            // TODO Auto-generated method stub
            Log.e("GridView","firstVisibleItem"+firstVisibleItem+"\nLastVisibleItem"+totalItemCount);
            }
        }
    });

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