使用 LinearLayoutManager 在 RecyclerView 中滚动到顶部 [英] Scroll to top in RecyclerView with LinearLayoutManager
问题描述
我有一个片段,其中有 RecyclerView
和 LinearLayoutManager
,其中有 CardView
项.单击时有一个浮动操作按钮,项目应滚动到顶部.我尝试使用 scrollToPosition
以及 scrollToPositionWithOffset
和 RecyclerView
以及 LinearLayoutManager
,如下所示.但它根本没有效果.为什么会这样?谁能帮帮我.
I have a fragment in which there is RecyclerView
with LinearLayoutManager
in which there are CardView
items. There is a floating action button on clicking which the items should scroll to top. I have tried using scrollToPosition
as well as scrollToPositionWithOffset
with RecyclerView
and also with LinearLayoutManager
as shown below. But it has no effect at all. Why is this so? Can anyone please help me out.
我已经将 RecyclerView
直接放在 xml 文件中的 SwipeRefreshView
中.我将适配器设置为 RecyclerView
后立即调用 setFloatingActionButton
.
And i have placed the RecyclerView
directly inside the SwipeRefreshView
in the xml file. I am calling setFloatingActionButton
as soon as set adapter to 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();
}
});
}
推荐答案
从上面的评论继续,理想情况下,替换
Continuing from above comments, ideally, replacing
mRecyclerView.smoothScrollToPosition(0);
在带有
mLayoutManager.scrollToPositionWithOffset(0, 0);
应该可以.您还可以删除 SnackBar
代码,因为无论如何您都不需要它.所以,总而言之,你上面的方法应该看起来像
should work. You can also remove the SnackBar
code, because you don't need it anyways. So, all in all your above method should look like
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()
是否被调用了.尝试在其中添加一条日志消息,看看是否打印出来.
And if you say that the above doesnt work, then test if the onClick()
is even being called or not. Try adding a log message in it and see if its printed.
这篇关于使用 LinearLayoutManager 在 RecyclerView 中滚动到顶部的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!