RecyclerView 滚动到特定位置

9
我有一个自定义的RecyclerView,并且使用ViewHolder。我有一个SearchView。我想根据搜索文本移动RecyclerView的位置。我该如何完成这个任务?这样,搜索文本过滤器就会执行,根据过滤结果,我将得到过滤文本的位置,然后使用该位置将我的焦点(滚动)移动到那个位置。
谢谢。
3个回答

14

试试这个:

myRecyclerview.scrollToPosition(position);

如果在某些情况下不起作用(例如键盘打开等),请尝试使用延迟。

new Handler().postDelayed(new Runnable() {
    @Override
    public void run() {
         myRecyclerview.scrollToPosition(position);
    }
 }, 200);

谢谢您的回复。但是我有一个搜索视图,当我搜索任何文本并且需要跳转到我已经搜索过的位置时,我该如何获取搜索到的位置? - Nik
@Nik,你需要为你的列表编写一个搜索或筛选算法。我不知道你的代码或者你想要实现什么,但是你需要在搜索视图中使用关键字,并在列表中进行搜索。然后获取你找到的项目的位置。请参考:https://dev59.com/c2cs5IYBdhLWcg3w5H9a#12496197 - Oğuzhan Döngül

0

这也可以工作,但非常缓慢且效果不佳。Recycelerview 不会每次都以相同的速度加载,这就是为什么这个会有点卡顿。

new Handler().postDelayed(new Runnable() {
    @Override
    public void run() {
         myRecyclerview.scrollToPosition(position);
    }
 }, 200);

但是经过长时间的努力,我找到了一个改进版本,它运行得非常非常好。

private void scrolltopos() {
        int index = 0;
        if (layoutManager.findFirstCompletelyVisibleItemPosition() != index) {
            recyclerview.getLayoutManager().scrollToPosition(index);
            new Handler().postDelayed(new Runnable() {
                @Override
                public void run() {
                    scrolltopos();
                }
            }, 1000);
        } else {
            new Handler().postDelayed(new Runnable() {
                @Override
                public void run() {
                    recyclerview.setVisibility(View.VISIBLE);
                }
            }, 1000);
        }
    }

这段代码就像一个循环。它会一直运行,直到达到您想要的位置。此外,在操作完成后,它还会自动使RecyclerView可见。


0
尝试使用myRecyclerview.smoothScrollToPosition(position);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接