【问题标题】:Disable scrolling animation using smoothScrollToPosition使用 smoothScrollToPosition 禁用滚动动画
【发布时间】:2015-03-26 10:12:26
【问题描述】:

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

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

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

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

任何建议都会很好

【问题讨论】:

    标签: android listview scrollview bundle expandablelistview


    【解决方案1】:

    根据我的经验,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;
            }
        });
    

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

    list.setSelection(scrollTo);
    

    希望对你有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多