android - 使用 LinearLayoutManager 在 RecyclerView 中滚动到顶部

标签 android android-recyclerview

我有一个 fragment ,其中有 RecyclerViewLinearLayoutManager,其中有 CardView 项。单击项目应滚动到顶部有一个 float 操作按钮。我已经尝试使用 scrollToPosition 以及 scrollToPositionWithOffsetRecyclerView 以及 LinearLayoutManager,如下所示。但它根本没有效果。为什么会这样?谁能帮帮我。

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

 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();
        }
    });
}

最佳答案

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

mRecyclerView.smoothScrollToPosition(0);

onClick 的 float Action 按钮上加上

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() 是否被调用。尝试在其中添加一条日志消息,看看是否打印出来。

关于android - 使用 LinearLayoutManager 在 RecyclerView 中滚动到顶部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32159724/

相关文章:

java - 如何在Fragments中设置RecyclerView OnClickListener?

android - Youtube 视频未显示在 RecyclerView 中

android - 根据自定义 View 适配器的TAG值获取Item的位置

android - 将 ProgressBar 添加到 Webview - Android

java - 由于缺少 Java 类,Android Studio 3.1 不呈现 XML 文件

android - MultiAutoCompleteTextView 添加 ", "

android - 如何检测在 RecyclerView 适配器内是否单击了 Activity 中的按钮

android - 在 recyclerview 中单击按钮如何增加计数器并在 textview 中显示

java - A* 寻路 java 无法正常工作

android - 当我从列表中选择一个项目时回来