使用 LinearLayoutManager 在 RecyclerView 中滚动到顶部

新手上路,请多包涵

我有一个片段,其中有 RecyclerViewLinearLayoutManager 其中有 CardView 项目。单击项目应滚动到顶部有一个浮动操作按钮。 I have tried using scrollToPosition as well as scrollToPositionWithOffset with RecyclerView and also with LinearLayoutManager as shown below.但它根本没有效果。为什么会这样?谁能帮帮我。

我已将 RecyclerView 直接放在 xml 文件中的 SwipeRefreshView 内。只要将适配器设置为 setFloatingActionButton ,我就会打电话给 RecyclerView

  public void setFloatingActionButton(final View view) {
    float = (android.support.design.widget.FloatingActionButton) getActivity().findViewById(R.id.float);
    float.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
    mRecyclerView.smoothScrollToPosition(0);

            android.support.design.widget.Snackbar.make(view, "Scrolled to Top", android.support.design.widget.Snackbar.LENGTH_SHORT)
                    .setAction("Ok", new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            LinearLayoutManager llm = (LinearLayoutManager) mRecyclerView.getLayoutManager();
                            llm.scrollToPosition(0);

                        }
                    })
                    .setActionTextColor(getActivity().getResources().getColor(R.color.coloLink))
                    .show();
        }
    });
}

原文由 SRBhagwat 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 806
2 个回答

继续上述评论,理想情况下,替换

mRecyclerView.smoothScrollToPosition(0);

在浮动操作按钮的 onClick

mLayoutManager.scrollToPositionWithOffset(0, 0);

应该管用。您也可以删除 SnackBar 代码,因为无论如何您都不需要它。所以,总而言之,你上面的方法应该看起来像

public void setFloatingActionButton(final View view) {
    float actionButton = (android.support.design.widget.FloatingActionButton) getActivity()
            .findViewById(R.id.float);
    actionButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            LinearLayoutManager layoutManager = (LinearLayoutManager) mRecyclerView
                    .getLayoutManager();
            layoutManager.scrollToPositionWithOffset(0, 0);
        }
    });
}

如果您说上述方法不起作用,请测试 onClick() 是否被调用。尝试在其中添加一条日志消息,看看它是否打印出来。

原文由 Antrromet 发布,翻译遵循 CC BY-SA 3.0 许可协议

有时用户使用 NestedScrollView 作为我们可以使用下面的代码的 NestedScrollView。

  /*Scrolls NestedScrollView to the top of screen.*/
        viewBinding.scrollview.fullScroll(View.FOCUS_UP)

也许它可以在将来对某人有所帮助。

原文由 Gyan Swaroop Awasthi 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题