Android ListView,其中新项目推动旧项目“向下”

时间:2013-12-29 15:23:41

标签: android listview animation android-listview

我的应用程序有一个ListView,其中数据从顶部自动添加(通过适配器上的setData)。设置数据时,通常大多数数据保持不变,顶部只添加几个项目。通常存在数十个项目,并且每隔~10秒在顶部添加1-2个项目。

现在用户体验很糟糕。它完全用新数据重新绘制列表。如果用户在数据更新之前正在阅读某个项目,他将丢失旧位置,并需要滚动才能再次找到它。

我希望看到更加人性化的过渡/动画,其中旧数据被推下,新项目被添加到顶部。或者 - 新数据“向下”推送旧数据 - 我可以看到这个动画。 (类似于'自动收报机' - 只有垂直,项目在列表视图上。)

我浏览了ListViewAnimations和JazzyListView。它们非常好,但它们不支持我的要求。

我讨厌重新发明轮子,所以在空了之后我想确保那里没有任何东西。

3 个答案:

答案 0 :(得分:1)

  

如果用户在数据更新之前正在阅读项目,他会   失去原来的位置,需要滚动才能找到它。

在更新列表视图之前,请记住该位置并将其恢复。

有些事情是这样的:

private int position;
private void save(){
    position = myListView.getFirstVisiblePosition();
}
private void restore(){
    myListView.setSelection(position);
}

答案 1 :(得分:0)

你应该从Android Developer页面查看它:

http://developer.android.com/training/animation/layout.html#activity

答案 2 :(得分:0)

您可以在调用setData之前getFirstVisiblePosition,之后调用setSelection。那仍然会略微跳跃(捕捉到当前的第一个可见项),不幸的是我认为你需要继承ListView来访问像素滚动值(getScrollY用于视图本身,而不是用于在其中滚动)。

也许考虑让用户决定何时重新加载?例如,显示列表标题“3个新项目,向下滑动以刷新”或其他一些。