ListView的position的保持


需求場景:

一個ListView頁面,滑動閱讀到某一位置,然后退出頁面,下次再進入頁面的時候,想要直接滑動到上次閱讀的位置。

 

方案1:

頁面退出的時候,ListView.getFirstVisiblePosition()來獲取當前可見的第一個Item的position並記錄,下次再進入頁面的時候通過ListView.setSelection(int position)把ListView直接滑動到記憶的position。

 

此方案記憶的ListView的位置不夠精准,因為position指定的是ListView的Item的index,setSelection(int pos)只能把index為pos的item作為第一個可見的item來顯示,所以item總是頂頭顯示的,不會顯示滑出屏幕一半的item,所以ListView的位置只能定位到某個item的開始位置,並不精准。

 

方案1的升級:

在方案1的基礎上,再記錄FirstVisiblePosition item的top/bottom等位置參數,然后恢復的時候ListView再scrollTo一下。

 

此方案仍然不行,ListView的scrollTo沒效果。

 

終極方案:

退出頁面的時候:

Parcelable listState = listView.onSaveInstanceState();

記住listState對象;

再次進入頁面的時候:

listView.onRestoreInstanceState(listState);

 

記憶的位置分毫不差。

 

要注意:listView的狀態記憶后,還要保證其數據在兩次進入頁面時的一致性;

另:ListView的header會影響其狀態對象,不過這個是小問題。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM