【问题标题】:Android ListView, where new items push the old ones 'down'Android ListView,新项目将旧项目“向下”推
【发布时间】:2013-12-29 15:23:40
【问题描述】:

我的应用有一个 ListView,数据从顶部自动添加(通过适配器上的 setData)。设置数据时,通常大部分数据保持不变,仅在顶部添加少数项目。通常存在数十个项目,每约 10 秒在顶部添加 1-2 个项目。

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

我希望看到的过渡/动画更适合人类,旧数据被下推,新项目被添加到顶部。或者 - 新数据将旧数据“向下”推 - 我可以看到这个动画。 (类似于'ticker' - 仅垂直,并且项目位于列表视图上。)

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

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

【问题讨论】:

    标签: android listview animation android-listview


    【解决方案1】:

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

    在更新列表视图之前记住位置并恢复它。

    类似这样的事情:

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

    【讨论】:

    • 嗨。这是我到现在为止使用的,它对于一个粗略的 alpha 来说是“OKish”,但不是作为一个版本。首先,除非用户恰好在第一个可见位置的第一个像素处,否则会有误差范围。换句话说 - 第一个可见位置是半可见的)。另外,我有一些视图会改变它们的大小,因此“之前”的位置与“之后”的位置不同。最后,当我把它作为一个用户来考虑时——一个人,看起来是一个自然的过渡——你会期望缓慢向下滚动并在顶部(或底部)添加新项目
    【解决方案2】:

    你应该检查一下,它来自 Android 开发者页面:

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

    【讨论】:

    • 试过了。很奇怪——有些项目有动画,有些没有。而且它并没有解决问题 - 尽管如此,当调用“setData”时,整个项目列表都会被擦除,并绘制一个新列表。
    【解决方案3】:

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

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

    【讨论】:

    • 嗨。谢谢,但请参阅我对@Babibu 的回答
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多