Android:StaggeredGridLayoutManager在初始化时滚动到顶部

Neo*_*Neo 8 android gridlayoutmanager

我正在使用StaggeredGridLayoutManager作为我的图片库.我已经设置好了setReverseLayout(true),所以图像从底部堆叠起来.

我面临的问题是在初始化app时,滚动点位于图库底部.当用户第一次启动应用程序时,我希望滚动位于库的顶部.

我已经尝试过使用scrollToPosition(下面的代码片段)但是滚动结果在画廊中间的某个地方结束,可能是因为在调用时图像没有正确加载scrollToPosition.

mLayoutManager = new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL);
    mLayoutManager.setReverseLayout(true);

mRecyclerView.setLayoutManager(mLayoutManager);
mImageList = ((MainActivity)getActivity()).getImages();
adapter = new ImageAdapter(getActivity(),mImageList);
mRecyclerView.setAdapter(adapter);
mRecyclerView.scrollToPosition(mImageList.size()-1);
Run Code Online (Sandbox Code Playgroud)

是否有正确的方法将滚动指向顶部而不是底部?

yww*_*ynm 2

我之前解决过类似的问题,方法如下:

mRecyclerView.getViewTreeObserver().addOnGlobalLayoutListener(
                new ViewTreeObserver.OnGlobalLayoutListener() {
                    @SuppressWarnings("deprecation")
                    @Override
                    public void onGlobalLayout() {
                        ViewTreeObserver observer = mRecyclerView.getViewTreeObserver();
                        scrollRecyclerViewToTop();
                        if (!observer.isAlive()) {
                            return;
                        }
                        if (mScrolledByUser) {
                            if (hasJellyBeanApi()) {
                                observer.removeOnGlobalLayoutListener(this);
                            } else {
                                observer.removeGlobalOnLayoutListener(this);
                            }
                        }
                    }
                });
Run Code Online (Sandbox Code Playgroud)

和:

mRecyclerView.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        mScrollByUser = true;
        return false;
    }
});
Run Code Online (Sandbox Code Playgroud)

和:

private void scrollRecyclerViewToTop() {
    mRecyclerView.scrollToPosition(0);
    mRecyclerView.scrollBy(0, Integer.MIN_VALUE);
}
Run Code Online (Sandbox Code Playgroud)

含义很简单:让RecyclerView始终滚动到顶部,直到用户触摸它。希望这可以帮到你。