我尝试在我的活动中集成2个列表视图,这样当在一个列表视图上单击一个项目时,另一个将平滑地滚动到单击的位置。这也应该以相反的方式工作,即如果单击第二个listview项,则第一个listview应该平滑地滚动到该位置。
我试图为我的第二个listview调用smoothScrollToPositionFromTop,在此之前我将onScrollListener设置为null并设置一个变量(此变量应该停止第二个scrolllistener)并使用postDelayed将onScrollListener重置为第二个listview滚动完成后。但是,即使我将smoothScroll持续时间设置为500,并将延迟时间设置为9000(试着继续尝试),也会在9000ms后调用onscroll方法进行第二次listview!一旦onscrolllistener被设置,是否有办法清除正在发布的滚动事件???
简单地说,我只是想为第二个listview禁用onScrollListener,而我以编程方式对其进行smoothscroll,对于第一个listview则相同。
我的代码如下:
final int temp=(Integer)animQueueObj;
list.setOnScrollListener(null);
list.smoothScrollToPositionFromTop(temp,0,500);
list.setOnScrollListener(new OnScrollListener() {
@Override //THIS part is to fix a bug with smoothscrollToPositionfromtop http://stackoverflow.com/a/15828993/2138983
public void onScrollStateChanged(AbsListView view, int scrollState) {
if(scrollState==OnScrollListener.SCROLL_STATE_IDLE){
list.setOnScrollListener(null);
list.smoothScrollToPositionFromTop(temp,0,0);
//POINT X
}
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
}
});
list.postDelayed(new Runnable() {
@Override
public void run() {
mListScrollListen = true;
//list.smoothScrollBy(0, 0);
list.setOnScrollListener(mListScrollIstener); //I tried writing these lines at point X also to no avail
}
}, 9000);