Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/216.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用smoothScrollToPosition禁用滚动动画_Android_Listview_Scrollview_Bundle_Expandablelistview - Fatal编程技术网

Android 使用smoothScrollToPosition禁用滚动动画

Android 使用smoothScrollToPosition禁用滚动动画,android,listview,scrollview,bundle,expandablelistview,Android,Listview,Scrollview,Bundle,Expandablelistview,我正在使用可扩展的listview,并且每5秒钟更新一次列表,我想用新数据更新列表,新数据来自与用户留下的以前数据相同的滚动位置 我可以通过使用getLastVisiblePosition&onSaveInstanceState来实现这一点,但我注意到有些奇怪的事情 当用户离开展开的第0个组时,我用新数据填充列表,onSaveInstanceState不仅适用于第0个索引,而且适用于其他展开的组。不过,我正在使用getLastVisiblePosition解决第0组索引的问题,但当更新新数据时,

我正在使用可扩展的listview,并且每5秒钟更新一次列表,我想用新数据更新列表,新数据来自与用户留下的以前数据相同的滚动位置

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

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

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


任何建议都很好

根据我的经验,getLastVisiblePosition并不总是有效,索引有时非常奇怪,而对于onSaveInstanceState,它只在您离开活动然后回来时有效。这不是您的情况,这就是onSaveInstanceState不工作的原因

我认为使用onScroll listener并获取最后或第一个可见索引位置是最好的选择。检查下面的示例

要删除这些恼人的动画,你应该使用
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);
我希望它能帮助你