【发布时间】:2014-09-28 16:09:04
【问题描述】:
我有一个 ListView 和一个方法 (public ArrayAdapter<String> populateListView(){}) 来更新适配器。我每 500 毫秒打电话给lv.setAdapter(populateListView();。这可行,但如果我向下滚动 ListView,当调用该方法时,它会重置我的视图并自动将我滚动到顶部。因此,如果我的 ListView 下降了 80%,当调用该方法时,我将重置为 0%。
如何在不重置滚动位置的情况下持续填充我的 ListView?
我已经尝试在设置适配器之前调用lv.getScrollY();,然后再调用lv.setScrollY();,但这没有帮助。我也试过打电话给lv.scrollTo(0, scrollY);,但这无济于事。
更新适配器时如何停止重置滚动位置?
【问题讨论】:
-
每个
500ms?您是在实时绘制我们穿越宇宙的旅程吗? -
无论如何,当您调用
setAdapter(...)时,列表视图滚动位置会重置。你看过notifyDataSetChanged()吗?此外,setScroll()和scrollTo()方法必须发布到 View => mListView.post(new Runnable() { ... })。将lv.scrollTo(0, scrollY)调用放在Runnable的run()方法中。500ms非常令人震惊。考虑切换到不那么剧烈的时间单位。 -
@Vikram 很好地考虑到 Android 大约在每个滴答声都会保存系统文件,我需要相当快地更新这些值。
标签: android listview android-listview