listview,gridview定位到當前position,並可見。
阿新 • • 發佈:2018-12-11
引言
一個簡單的小方法,記錄下,方便以後檢視。
具體使用場景
我們在進行 音樂,視訊開發的時候,經常遇到很多種方式的切歌,切換視訊。比如控制欄中進行切換,亦或者音樂視訊播放完自動切換,或者滑動切換。在或者列表選擇切換,這裡暫時排除列表選擇切換,畢竟這個是可見的選擇項。
可能我們列表DATA 資料很多,一時間隨機播放或者切換 導致找不到當前的 media 的 item 的 position。我們的需求是:
當前 media 在列表 position 處於可見 時候,不進行操作。當前 media 已經切換到不可見的position 的時候,就要進行 自動定位,使得Item 可見。
其實呼叫下面方法就可以 初步實現需求:
listview.smoothScrollToPosition(selectitem);
具體操作步驟也很簡單,需要定位出當前的 FirstVisiblePosition 和 LastVisiblePosition 。
public void setSelectVideoPosition(final int selectitem) { if (listview.getVisibility() == View.VISIBLE) { listview.clearFocus(); int lastVisiblePosition = listview.getLastVisiblePosition(); int firstVisiblePosition = listview.getFirstVisiblePosition(); if (selectitem >= lastVisiblePosition || selectitem <= firstVisiblePosition) { listview.post(new Runnable() { @Override public void run() { listview.smoothScrollToPosition(selectitem); } }); } listadapter.notifyDataSetChanged(); } else { gridview.clearFocus(); int lastVisiblePosition = gridview.getLastVisiblePosition(); int firstVisiblePosition = gridview.getFirstVisiblePosition(); /**(當前的gridview 是橫向3個,根據需要後面的自行修改) 使用 -2和+2 為了保證在gridview 中 切換到每一行的首尾時候就開始定位。 而不是到每一行快要結束時候才定位*/ if (selectitem >= lastVisiblePosition -2 || selectitem <= firstVisiblePosition +2 ) { gridview.post(new Runnable() { @Override public void run() { gridview.smoothScrollToPosition(selectitem); } }); } gridadapter.notifyDataSetChanged(); } }
同樣自己也可以自定義一個View,或者使用RecyclerView。