Dio*_*lor 5 android android-arrayadapter android-listview android-adapter
是否可以在每个listview的项目上都有一个可见性监听器?喜欢:在用户看到项目时,做一些事情.项目被隐藏,做其他事情.
我想检查项目"进入"或"退出"滚动的时间,以便更新第二个列表.
另外我的ListView可能会扩展如下:
adapter.addAll( (Collection<? extends DBObject>) events);
adapter.notifyDataSetChanged();
Run Code Online (Sandbox Code Playgroud)
我认为一种方法可能是使用全局监听器来检查项目,但是如果我向ListView添加更多项目(上图),我担心它会搞砸.我还没有完成任何事情
eventList.setOnScrollListener(new OnScrollListener() {
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
}
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {}
});
Run Code Online (Sandbox Code Playgroud)
您可以使用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.
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3115 次 |
| 最近记录: |