我需要你的帮助。是否可以从适配器获取listview的第一个可见位置?
到目前为止,我所尝试的是获得该职位并将其转回活动。但这不是我真正想要的。我需要获取第一个可见项并滚动到它。
任何帮助将不胜感激。谢谢!
答案 0 :(得分:2)
在Activity或Fragment中,在listview上实现OnScrollListener。这就是它的样子,虽然它除了之外不会做任何事情,好吧,听听;)
OnScrollStateChanged()
这里有一些你可以在@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
switch (scrollState) {
case SCROLL_STATE_FLING:
Toast.makeText(context, "flinging", Toast.LENGTH_SHORT).show();
break;
case SCROLL_STATE_TOUCH_SCROLL:
Toast.makeText(context, "touch scrolling", Toast.LENGTH_SHORT).show();
break;
}
}
方法中做的有趣的事情...例如,你可能希望每次滚动或抛出列表视图时执行某种操作(在下面的例子中,我们是只是要生成一个Toast消息):
onScroll()
int currentFirst = 0;
int currentLast = 0;
@Override
public void onScroll(AbsListView view, int firstVisible,
int visibleCount, int totalItems) {
int lastVisible = firstVisible + visibleCount - 1;
if (currentFirst != firstVisible && currentLast != lastVisible) {
Toast.makeText(context, "first visible position = " + firstVisible
+ ", last visible position = " + lastVisible, Toast.LENGTH_SHORT).show();
currentFirst = firstVisible;
currentLast = lastVisible;
}
}
方法可能会让您感兴趣。在下面的示例中,当第一个可见位置和最后一个可见位置发生变化时,我们将生成一个Toast消息:
onScroll()
在上面的int firstVisible
示例中,您可以看到如何同时获取列表视图中的第一个可见项和最后一个可见项:
首先可见: int firstVisible
上次可见: int visibleCount
+ size
- 1;