我有一个 fragment ,其中有 RecyclerView
和 LinearLayoutManager
,其中有 CardView
项。单击项目应滚动到顶部有一个 float 操作按钮。我已经尝试使用 scrollToPosition
以及 scrollToPositionWithOffset
和 RecyclerView
以及 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/