1. 程式人生 > >listview,gridview定位到當前position,並可見。

listview,gridview定位到當前position,並可見。

引言

一個簡單的小方法,記錄下,方便以後檢視。

具體使用場景

我們在進行 音樂,視訊開發的時候,經常遇到很多種方式的切歌,切換視訊。比如控制欄中進行切換,亦或者音樂視訊播放完自動切換,或者滑動切換。在或者列表選擇切換,這裡暫時排除列表選擇切換,畢竟這個是可見的選擇項。
可能我們列表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。