使用 smoothScrollToPosition 禁用滚动动画

Disable scrolling animation using smoothScrollToPosition

我正在使用可扩展的列表视图并每 5 秒更新一次列表,我想用新数据更新列表,新数据来自与用户离开之前数据相同的滚动位置。

我可以通过使用 getLastVisiblePosition & onSaveInstanceState 来实现这一点,但我注意到一些奇怪的事情,

当用户离开第 0 个扩展组时,我用新数据填充列表并且 onSaveInstanceState 不仅适用于第 0 个索引,而它适用于其他扩展组。但是,我正在通过使用 getLastVisiblePosition 为第 0 组索引做解决方法,但是当新数据更新时,它在更新可扩展列表视图后通过滚动到达位置,滚动有点烦人,它应该直接在最后一个可见位置。

所以我的问题是,为什么 onSaveInstanceState 不适用于扩展的第 0 组,或者如果我使用 getLastVisiblePosition,如何消除恼人的滚动。

有什么建议就好

根据我的经验,getLastVisiblePosition 并不总是有效,索引有时也很奇怪,而对于 onSaveInstanceState,它仅在您离开 activity 然后返回时有效。这不是你的情况,这就是 onSaveInstanceState 不起作用的原因。

我认为使用 onScroll 侦听器并获取最后或第一个可见索引位置的最佳选择。检查下面的例子

虽然要删除这些烦人的动画,但您应该使用 setSelection 而不是像 smootScrolling 等任何东西。

 private int scrollTo
 list.setOnScrollListener(new AbsListView.OnScrollListener() {
        @Override
        public void onScrollStateChanged(AbsListView view, int scrollState) {
        }

        @Override
        public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
            scrollTo = firstVisibleItem;
        }
    });

然后在为列表视图设置适配器后,您应该使用

list.setSelection(scrollTo);

希望对您有所帮助。