2013-05-01 44 views
12

我對我的Android應用程序有一個小問題。 我搜索了很長時間,但沒有發現任何關於我的問題。Android - 反向列表視圖作爲消息顯示

方案:我已經顯示復歸的ListView(如Facebook Messenger的)。 當用戶滾動到頂部時,加載更多消息。

問題:調用notifiyDataAsChanged()後,滾動不一樣! 我想保存與加載前完全相同的位置。

我試過代碼:

// save index and top position 
int index = list.getFirstVisiblePosition()+result.size(); 
View v = list.getChildAt(index); 
int top = (v == null) ? 0 : v.getTop(); 

// ... 
// restore 
list.setSelectionFromTop(index, top); 

但滾動不正是加載後相同。

你有想法嗎?

回答

35

我想你應該考慮使用TranscriptModeStackFromBottom你的ListView:

android:stackFromBottom="true" 
android:transcriptMode="normal" 

通過設置成績單普通方式將滾動到只有在最後一個項目已經在視圖底部。這樣,當您調用notifydatasetchanged時,用戶可以無中斷地查看以前的列表視圖項目。

+0

感謝您的幫助。我不明白你的帖子。如果我在第32項上,在notifydataset改變後,我想再次登錄第32項!但現在,當這種方法被稱爲,我不在這個項目... – 2013-05-01 15:54:15

+5

這個答案是誤導。 'stackFromBottom'將對象移動(堆棧)到底部,它不會創建相反的順序。對象仍然是從底部添加的,這不是@FlorianMacLlade所問的問題(我也在尋找相同的解決方案)。 – Diolor 2014-03-28 17:18:43

+0

@Diolor是對的。 'stackfromBottom'只是你想要的一部分。另一部分是相反的順序,這裏回答:http://stackoverflow.com/questions/10941317/inverted-listview-in-android – Chris 2014-04-29 14:17:14

2

我通過使用與您包含的代碼相同的代碼解決了這個問題,但是我通過在恢復位置之前添加到適配器的項目數來更新索引變量。似乎要做的伎倆。

2

這樣做:

Collections.reverse(YourList); // ADD THIS LINE TO REVERSE ORDER! 
YourList.notifyDataSetChanged;