Wait unitl ListView's smoothScrollToPosition() finishes

前端 未结 2 1705
灰色年华
灰色年华 2020-12-28 18:15

Scope

I need to scroll to certain position smoothly and then "jump" to another position with setSelection(anotherPosition). This is done to c

2条回答
  •  借酒劲吻你
    2020-12-28 18:48

    final ListView listView = ...;
    View listItemView = ...;
    listView.smoothScrollBy(listItemView.getHeight() * NUMBER_OF_VIEWS, 
        DURATION * 2);
    listView.postDelayed(new Runnable() {
        public void run() {
            listView.smoothScrollBy(0, 0); // Stops the listview from overshooting.
            listView.setSelection(0);
        }
    }, DURATION);
    

    Of course, direction of the scroll etc. would need to be adjusted for your use case (go to the top of the list)

    EDIT: Old solution could overshoot if the velocity of the scroll was too high, smoothScrollBy(0,0) will stop the smooth scrolling before setting the selection properly and immediately.

提交回复
热议问题