我尝试在我的活动中集成 2 个列表视图,这样当在一个列表视图上单击一个项目时,另一个将平滑滚动到单击的位置。这也应该以相反的方式工作,即如果单击第二个列表视图项,则第一个列表视图应该平滑滚动到该位置。
我试图为我的第二个列表视图调用smoothScrollToPositionFromTop,在此之前我将onScrollListener设置为null并设置一个变量(这个变量应该停止第二个滚动监听器)并且我使用postDelayed将onScrollListener重置为第二个列表视图一旦我滚动已经完成了。但是发生的情况是,即使我将 smoothScroll 持续时间保持为 500,并将 postdelayed 持续时间设置为 9000(尝试得意忘形),在 9000 毫秒后为第二个列表视图调用 onscroll 方法!一旦设置了 onscrolllistener 有没有办法清除正在发布的滚动事件???
简而言之,我只想为第二个列表视图禁用 onScrollListener,同时以编程方式平滑滚动它,并且对第一个列表视图相同。
我的代码如下:
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);