アクティビティに 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);