Android 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()中重写的方法

是否可以在每个listview的项上都有一个可见性侦听器?比如:在用户看到项目时,执行一些操作。如果项目已隐藏,请执行其他操作

我想检查项目何时“进入”或“退出”滚动,以便更新第二个列表

另外,我的ListView可能会像这样展开:

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.
}