使用smoothScrollToPosition禁用滚动动画

时间:2015-03-26 10:12:26

标签: android listview scrollview bundle expandablelistview

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

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

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

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

任何建议都会很好

1 个答案:

答案 0 :(得分:2)

根据我的经验,getLastVisiblePosition总是不起作用,索引有时候很奇怪,而对于onSaveInstanceState,它只有在你离开活动然后回来时才有效。这不是你的情况,这就是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;
        }
    });

然后在为listview设置适配器后,您应该使用

list.setSelection(scrollTo);

我希望它会对你有所帮助。