2010-03-29 119 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,它的行爲類似於聊天應用程序的要求,如果用戶想要查看頂部的內容,則不會強制滾動列表。

相關問題