通常,app中的數據都是以ListView的形式展示的。默認地,把“新”數據添加到數據列表的尾部。
但是,如果是IM類型的app,比如查看歷史消息這個模塊。新數據並不是插到數據列表的尾部,而是插到數據列表的頭部。
要實現比較好的用戶體驗,需要保持當前的ListView的位置。換句話說,如果我們能夠隨心所欲地指定ListView滾動的位置,那么這個問題就迎刃而解。
在ListView中,有一個setSelectionFromTop()方法,下面是一個使用范例。代碼如下:
看一下setSelectionFromTop()的具體實現,代碼如下:
從上面的代碼可以得知,setSelectionFromTop()的作用是設置ListView選中的位置,同時在Y軸設置一個偏移量(padding值)。
ListView還有一個方法叫setSelection(),傳入一個index整型數值,就可以讓ListView定位到指定Item的位置。
這兩個方法有什么區別呢?看一下setSelection()的具體實現,代碼如下:
1 /** 2 * Sets the currently selected item. If in touch mode, the item will not be selected 3 * but it will still be positioned appropriately. If the specified selection position 4 * is less than 0, then the item at position 0 will be selected. 5 * 6 * @param position Index (starting at 0) of the data item to be selected. 7 */ 8 @Override 9 public void setSelection(int position) { 10 setSelectionFromTop(position, 0); 11 }
原來,setSelection()內部就是調用了setSelectionFromTop(),只不過是Y軸的偏移量是0而已。現在應該對setSelection()和setSelectionFromTop()有了更深刻的認識了。
