1

アクティビティに 2 つのリストビューを統合して、1 つのリストビューで項目をクリックすると、もう 1 つのリストビューがクリックされた位置までスムーズにスクロールするようにしています。これは逆の方法でも機能するはずです。つまり、2 番目のリストビュー項目がクリックされた場合、最初のリストビューはその位置までスムーズにスクロールする必要があります。

2番目のリストビューでsmoothScrollToPositionFromTopを呼び出そうとしましたが、その前にonScrollListenerをnullに設定し、変数も設定しました(この変数は2番目のスクロールリスナーを停止するはずです)。スクロールしたらpostDelayedを使用してonScrollListenerを2番目のリストビューにリセットします終わらせる。しかし、smoothScroll の期間を 500 に保ち、postdelayed の期間を 9000 に設定しても (試行錯誤してしまいました)、9000 ミリ秒後に 2 番目のリストビューに対して onscroll メソッドが呼び出されます !!! onscrolllistener が設定されるとすぐに投稿されているスクロール イベントをクリアする方法はありますか ???

簡単に言えば、2番目のリストビューの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