1

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

0 回答 0