2010-03-29 46 views
42

呼叫notifydatasetchanged();我想滚动到列表的底部,以便用户看到列表视图中的最后一条记录。如何以编程方式滚动到ListView的底部?

(我写聊天模块,以便为目的,我需要最新的记录在列表的底部是可见的)

任何一个可以指导我如何实现这一目标?

回答

71

尝试

listView.post(new Runnable(){ 
    public void run() { 
    listView.setSelection(listView.getCount() - 1); 
    }}); 

“后”似乎是在我的经验需要一段时间,特别是如果你有非常最近更新列表。

+1

这个很好用。我之前尝试过'android:stackFromBottom =“true”',然后问题是,如果在我的列表视图中只有一个元素,它将成为屏幕的底部。谢谢 – philipp 2012-05-01 22:27:06

+0

注意:如果最后一个元素的高度大于listview的高度,那么最后一个元素的顶部将在列表的顶部对齐,即元素的底部不会是可见的。这就是为什么由Ribose描述的stackFromBottom解决方案更适合类似聊天的功能。 – 2013-02-06 12:24:52

+0

工作就像一个魅力!我也尝试stackFromBottom =“true”,但由于我没有清除列表,它不适合我的情况。 (至少我认为这是为什么。) – BostonGeorge 2013-11-24 20:52:03

81

我知道这个问题已经得到解答,你已经回答了,这是一年多以前。但是更好的方法是Transcript模式。有关演示,请参阅Views> Lists> Transcript下的Android API演示。

您可以在XML列表视图中设置以下内容。

android:stackFromBottom="true" 
android:transcriptMode="alwaysScroll" 

只要您致电notifyDataSetChanged(),它将始终有效。您可以将android:transcriptMode设置为normal,而不是如果您希望在聊天应用程序中获得更好的结果:只有在最后一项已在视图中的情况下,它才会滚动到底部。这样,当其他用户聊天时,您的用户可以不中断地查看以前的聊天。

+5

非常感谢! android:transcriptMode是神奇的:)你救了我! – Ciprian 2013-01-14 13:07:00

+0

真的这是一个非常好的选择。谢谢:) – Dinesh 2014-08-01 11:11:42

+0

很酷!有用 ! – Penzzz 2014-11-19 11:23:06

1

我知道它很晚回答,但可能会帮助别人。使用 android:transcriptMode="alwaysScroll"将强制列表视图滚动到底部(因为我们已经使用android:stackFromBottom="true"),即使您尝试滚动顶部,通常需要大部分时间。因此,您可以使用android:transcriptMode="normal而不是android:transcriptMode="alwaysScroll,它的行为类似于聊天应用程序的要求,如果用户想要查看顶部的内容,则不会强制滚动列表。

相关问题