使用 GridLayoutManager 以编程方式滚动 RecyclerView

Programmatically scroll a RecyclerView with GridLayoutManager

我已经用过这个了:

mRecyclerView.getLayoutManager().scrollToPosition(0);

以编程方式滚动 RecyclerViewLinearLayoutManager

我试图用 RecyclerViewGridLayoutManager 做同样的事情。

问题是 scrollToPosition 没有真正意义,因为一个项目可以在一行的中间。 不管怎样,我试过那个代码,但它什么也没做。

有没有办法以编程方式滚动 RecyclerViewGridLayoutManager

您可以使用 GridLayoutManager

的方法 "scrollVerticallyBy"
int scrollVerticallyBy (int dy, 
                RecyclerView.Recycler recycler, 
                RecyclerView.State state)

在屏幕坐标中垂直滚动 dy 个像素,return 移动的距离。默认实现什么也不做,returns 0。

参考:scrollVerticallyBy

实际上:

mRecyclerView.getLayoutManager().scrollToPosition(0);

有效。 就我而言,这不是因为我在方法中同步调用它:

public void onDestroyActionMode(ActionMode mode)

足以 post 一个可运行的(没有任何延迟)到主线程的循环程序。

    new Handler(Looper.getMainLooper()).post(new Runnable() {
        @Override
        public void run() {
            if (mRecyclerView != null) {
                mRecyclerView.scrollToPosition(0);
            }
        }
    });