smoothScrollToPositionFromTop在onScrollListener上调用onScroll方法,即使在滚动持续时间后分配onScrollListener时也是如此

时间:2013-08-06 18:04:43

标签: android android-listview smooth-scrolling

我尝试在我的活动中集成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);  

0 个答案:

没有答案