【发布时间】:2010-03-29 09:56:14
【问题描述】:
调用notifydatasetchanged(); 后,我想滚动到列表底部,以便用户看到列表视图中的最后一条记录。
(我正在编写聊天模块,因此为此我需要在列表底部显示最新记录)
谁能指导我如何实现这一目标?
【问题讨论】:
调用notifydatasetchanged(); 后,我想滚动到列表底部,以便用户看到列表视图中的最后一条记录。
(我正在编写聊天模块,因此为此我需要在列表底部显示最新记录)
谁能指导我如何实现这一目标?
【问题讨论】:
我知道这个问题已经得到解答,而你接受了答案,那是一年多以前的事了。但更好的方法是转录模式。有关演示,请参阅 Views > Lists > Transcript 下的 Android API 演示。
您可以在 XML 的列表视图中设置以下内容。
android:stackFromBottom="true"
android:transcriptMode="alwaysScroll"
无论何时拨打notifyDataSetChanged(),它都将始终有效。如果您希望聊天应用程序获得更好的结果,您可以将 android:transcriptMode 设置为 normal:只有当最后一个项目已经在视图中时,它才会滚动到底部。这样,您的用户可以在其他用户聊天时不间断地查看之前的聊天记录。
【讨论】:
试试
listView.post(new Runnable(){
public void run() {
listView.setSelection(listView.getCount() - 1);
}});
根据我的经验,“帖子”似乎有时需要,特别是如果您最近更新了列表。
【讨论】:
android:stackFromBottom="true",然后问题是如果我的列表视图中只有一个元素,它将是屏幕的底部。谢谢
notifyDataSetChanged() 之后直接调用,post 是必需的。使用post 会推迟setSelection(),直到列表的更新/刷新完成。
我知道现在回答很晚,但可能会对某人有所帮助。使用
android:transcriptMode="alwaysScroll" 将强制列表视图滚动到底部(因为我们在这里使用了android:stackFromBottom="true"),即使您尝试滚动顶部通常需要大部分时间。因此,您可以使用android:transcriptMode="normal 而不是android:transcriptMode="alwaysScroll,它的行为类似于聊天应用程序的要求,并且如果用户想在顶部看到内容,则不会始终强制滚动列表。
【讨论】: