禁用ListView滚动到顶部

时间:2012-07-13 09:42:30

标签: android

我有一个列表视图,动态地将项目添加到列表顶部。我在列表顶部显示了一些最新事件。问题是,这些事件非常频繁地发生,例如一秒钟内的5个事件。这使得列表下降。假设用户正在查看一个事件,然后当新事件发生时,它会推动他正在阅读下面的事件,并且消失了。我希望将新事件添加到顶部,但只有在他向上滚动时才会显示。一旦发生新事件,我就会在适配器上调用notifydatasetchanged,这会将列表向下推。无论如何我可以冻结滚动。我试图通过setTranscriptMode禁用滚动。但它似乎没有帮助。请给我一些提示并指出我

2 个答案:

答案 0 :(得分:5)

您可以尝试使用getFirstVisiblePosition()在屏幕上获取ListView的可见位置,然后使用setSelection的位置再次设置适配器。

int position = mListView.getFirstVisiblePosition();
mListView.setAdapter(adapter);
mListView.setSelection(position + 1);

我猜你需要(位置+ 1),因为你在列表顶部为添加到List的每个项目添加项目。

答案 1 :(得分:0)

要根据需要显示最新事件,您需要设置android:transcriptMode="normal"  默认情况下,无论何时更改数据集,都会将焦点设置为最后一项。

http://developer.android.com/reference/android/widget/AbsListView.html#attr_android:transcriptMode

此外,我想要冻结滚动,然后您可以设置setOnScrollListener()并仅更新列表。