listview,gridview定位到当前position,并可见。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_31332467/article/details/84950420

引言

一个简单的小方法,记录下,方便以后查看。

具体使用场景

我们在进行 音乐,视频开发的时候,经常遇到很多种方式的切歌,切换视频。比如控制栏中进行切换,亦或者音乐视频播放完自动切换,或者滑动切换。在或者列表选择切换,这里暂时排除列表选择切换,毕竟这个是可见的选择项。
可能我们列表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。

展开阅读全文

没有更多推荐了,返回首页