如何以编程方式滚动到ListView的底部?

时间:2010-03-29 09:56:14

标签: android listview

调用notifydatasetchanged();后,我想滚动到列表底部,以便用户查看Listview中的最后一条记录。

(我正在编写聊天模块,所以为了这个目的,我需要列表底部的最新记录才能看到)

任何人都可以指导我如何实现这一目标吗?

3 个答案:

答案 0 :(得分:82)

我知道这已经得到了解答,你接受了答案,这是一年多以前的事了。但更好的方法是成绩单模式。有关演示,请参阅视图>下的Android API演示。列表>转录物。

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

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

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

答案 1 :(得分:73)

尝试

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

根据我的经验,某些时候似乎需要“帖子”,特别是如果您最近更新了列表。

答案 2 :(得分:1)

我知道答案很晚但可能会对某人有所帮助。运用     android:transcriptMode="alwaysScroll"会强制列表视图滚动到底部(因为我们已使用android:stackFromBottom="true"),即使您尝试滚动顶部,这通常需要大部分时间。因此,您可以使用android:transcriptMode="alwaysScroll代替android:transcriptMode="normal,其行为类似于聊天应用的要求,并且如果用户想要在顶部看到内容,则不会强制滚动列表。