呼叫notifydatasetchanged();
我想滚动到列表的底部,以便用户看到列表视图中的最后一条记录。如何以编程方式滚动到ListView的底部?
(我写聊天模块,以便为目的,我需要最新的记录在列表的底部是可见的)
任何一个可以指导我如何实现这一目标?
呼叫notifydatasetchanged();
我想滚动到列表的底部,以便用户看到列表视图中的最后一条记录。如何以编程方式滚动到ListView的底部?
(我写聊天模块,以便为目的,我需要最新的记录在列表的底部是可见的)
任何一个可以指导我如何实现这一目标?
尝试
listView.post(new Runnable(){
public void run() {
listView.setSelection(listView.getCount() - 1);
}});
“后”似乎是在我的经验需要一段时间,特别是如果你有非常最近更新列表。
我知道这个问题已经得到解答,你已经回答了,这是一年多以前。但是更好的方法是Transcript模式。有关演示,请参阅Views> Lists> Transcript下的Android API演示。
您可以在XML列表视图中设置以下内容。
android:stackFromBottom="true"
android:transcriptMode="alwaysScroll"
只要您致电notifyDataSetChanged()
,它将始终有效。您可以将android:transcriptMode
设置为normal
,而不是如果您希望在聊天应用程序中获得更好的结果:只有在最后一项已在视图中的情况下,它才会滚动到底部。这样,当其他用户聊天时,您的用户可以不中断地查看以前的聊天。
我知道它很晚回答,但可能会帮助别人。使用 android:transcriptMode="alwaysScroll"
将强制列表视图滚动到底部(因为我们已经使用android:stackFromBottom="true"
),即使您尝试滚动顶部,通常需要大部分时间。因此,您可以使用android:transcriptMode="normal
而不是android:transcriptMode="alwaysScroll
,它的行为类似于聊天应用程序的要求,如果用户想要查看顶部的内容,则不会强制滚动列表。
这个很好用。我之前尝试过'android:stackFromBottom =“true”',然后问题是,如果在我的列表视图中只有一个元素,它将成为屏幕的底部。谢谢 – philipp 2012-05-01 22:27:06
注意:如果最后一个元素的高度大于listview的高度,那么最后一个元素的顶部将在列表的顶部对齐,即元素的底部不会是可见的。这就是为什么由Ribose描述的stackFromBottom解决方案更适合类似聊天的功能。 – 2013-02-06 12:24:52
工作就像一个魅力!我也尝试stackFromBottom =“true”,但由于我没有清除列表,它不适合我的情况。 (至少我认为这是为什么。) – BostonGeorge 2013-11-24 20:52:03