使用 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);
希望对您有所帮助。
我正在使用可扩展的列表视图并每 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);
希望对您有所帮助。