Android ListView(适配器)项目可见性侦听器
是否可以在每个listview的项上都有一个可见性侦听器?比如:在用户看到项目时,执行一些操作。如果项目已隐藏,请执行其他操作 我想检查项目何时“进入”或“退出”滚动,以便更新第二个列表 另外,我的ListView可能会像这样展开:Android ListView(适配器)项目可见性侦听器,android,android-listview,android-arrayadapter,android-adapter,Android,Android Listview,Android Arrayadapter,Android Adapter,是否可以在每个listview的项上都有一个可见性侦听器?比如:在用户看到项目时,执行一些操作。如果项目已隐藏,请执行其他操作 我想检查项目何时“进入”或“退出”滚动,以便更新第二个列表 另外,我的ListView可能会像这样展开: adapter.addAll( (Collection<? extends DBObject>) events); adapter.notifyDataSetChanged(); 答案就在你的问题里 在onScrollListener()中重写的方法
adapter.addAll( (Collection<? extends DBObject>) events);
adapter.notifyDataSetChanged();
答案就在你的问题里 在onScrollListener()中重写的方法之一是 传递的参数包括
firstVisibleItem
和visibleItemCount
。您可以使用这两个数字来确定哪些项目当前可见
请记住,滚动时经常调用onScroll。您可以使用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.
}
eventList.setOnScrollListener(新的OnScrollListener(){
int oldFirstVisibleItem=0;
int oldLastVisibleItem=0;
public void onScroll(AbsListView视图、int firstVisibleItem、int visibleItemCount、int totalItemCount){
如果(firstVisibleItem>oldFirstVisibleItem){
for(int i=oldFirstVisibleItem;ipublic void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
}
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.
}