是否可以在每个listview的项目上设置可见性监听器?喜欢:在用户看到项目时,做一些事情。在隐藏项目时,请执行其他操作。
我想检查项目“输入”或“退出”滚动的时间,以便更新第二个列表。
另外,我的ListView可能会扩展为:
adapter.addAll( (Collection<? extends DBObject>) events);
adapter.notifyDataSetChanged();
我认为一种方法可能是使用全局侦听器来检查项目,但如果我向ListView添加更多项目(上图),我担心它会搞砸。我还没有完成任何事情
eventList.setOnScrollListener(new OnScrollListener() {
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
}
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {}
});
答案 0 :(得分:7)
您可以使用onScroll函数来计算它。
eventList.setOnScrollListener(new OnScrollListener() {
int oldFirstVisibleItem = 0;
int oldLastVisibleItem = 0;
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
if (firstVisibleItem > oldFirstVisibleItem) {
for(int i = oldFirstVisibleItem; i < firstVisibleItem; i++) {
onExit(i);
}
}
if (firstVisibleItem < oldFirstVisibleItem) {
for(int i = firstVisibleItem; i < oldFirstVisibleItem; i++) {
onEnter(i);
}
}
int lastVisibleItem = firstVisibleItem + visibleItemCount - 1;
if (lastVisibleItem < oldLastVisibleItem) {
for(int i = oldLastVisibleItem+1; i <= lastVisibleItem; i++) {
onExit(i);
}
}
if (lastVisibleItem > oldLastVisibleItem) {
for(int i = oldLastVisibleItem+1; i <= lastVisibleItem; i++) {
onEnter(i);
}
}
oldFirstVisibleItem = firstVisibleItem;
oldLastVisibleItem = lastVisibleItem;
}
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {}
});
public void onEnter(int position) {
// Handle an item coming into view.
}
public void onExit(int position) {
// Handle an item going out of view.
}
答案 1 :(得分:2)
答案在你的问题中。
您在onScrollListener()中覆盖的方法之一是
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
}
传递的参数包括firstVisibleItem
和visibleItemCount
。您可以使用这两个数字来确定哪些项目当前可见。
请记住,在滚动时经常会调用onScroll。