我有一个动态填充的RecyclerView。
当新消息到达时,我使用此代码向下滚动到最后一个条目:
recyclerView.scrollToPosition(adapter.getItemCount() - 1);
现在的问题是:如果用户已经向上滚动阅读旧消息,它不应该向下滚动。怎么才能检测出来?
要检查可见项目的位置,您可以使用
yourRecyclerView.getLayoutManager().findFirstVisibleItemPosition();
你可以在这里找到参考
要了解更多细节,您可以查看这个stackoverflow线程
这是recyclerview的常见问题。我想你会在这里找到答案-如何使用RecyclerView。scrollToPosition()将位置移动到当前视图的顶部?
我假设您正在使用带有某种RecyclizerView之类的自定义适配器。只需创建静态布尔变量,当适配器中达到底部时,该变量有助于保持真实,如下所示,我假设在这种情况下使用recyclerView。
public class ChatAdapter extends RecyclerView.Adapter<ChatAdapter.ViewHolder> {
public static boolean bottomReached = false;
@Override //Make sure it happens on bindViewHolder or related...
public void onBindViewHolder(final ViewHolder holder, int position) {
if (position == data.size() - 1)
bottomReached = true;
else
bottomReached = false;
}
}
因此,在您的活动中,例如聊天活动,我们确实喜欢下面的内容。
public class ChatActivity extends AppCompatActivity{
ChatAdapter chatAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_chat);
chatAdapter = new ChatAdapter(this, messagesDataSample);
}
private void gotNewMessage(){
if(chatAdapter.bottomReached)
recyclerView.scrollToPosition(adapter.getItemCount() - 1);
else
// else is not necessary as you don't want to do anything.
}
}
希望这有帮助,否则请让我知道出了什么问题。
我做了一个水平循环视图,效果很好(多亏了这个),但滚动和数据的方向是从左向右扩展的;那么,我该如何更改RecyclerView滚动方向,如下图所示? 我的代码:
在其他回收器视图中有一个回收器视图。两者都需要垂直滚动。外部回收器视图滚动正常,但内部回收器视图滚动不正常。 这是代码: ViewAdapter如下: 我尝试了以下两种回收商观点,但都无法解决问题 也尝试了这个:
我有一个水平回收视图。每个子级包含一个TextView和一个垂直RecyclerView。垂直RecyclerView的子级仅包含TextView。 垂直滚动非常平滑,但水平滚动滞后很多。我已经尝试在onBindViewHolder中使用swapAdapter,而不是setAdapter,但这并没有解决问题。我也尝试过更改数据集并调用notifyDataSetChanged(),但这也没有帮助。
问题在于,当软键盘出现或消失时,recyclerview几乎向下滚动一整行。 这里有一个直观的例子: 活动的布局使用ChatKit UI库中的MessageInput和MessageList对象,如下所示: 该活动还在清单中设置了 adjustPan: Recyclerviews线性布局管理器设置为垂直,具有反向布局和默认项目animator: 理想情况下,我不想设置键盘侦听器并在每次显示/隐藏键
我正在拼命地尝试在一个使用Kotlin的android应用上实现无休止的滚动。所有的教程要么是无用的,因为他们没有正确地解释事情。例如:https://github.com/chetdeva/recyclerView-bindings 它看起来很有前途,但作者使用了这样的短语,比如“把这个放在你的bindingadapter中”,所以我查看了这个是什么,我找到了一个java文件,但如果你在其中插入
我正在使用下面的代码创建一个回收器视图。recyclerview有一个网格布局管理器,其项计数最多为每行2个。 不幸的是,我嵌套在ConstraintLayout中的回收器视图根本没有滚动。我错过了什么?约束布局是否支持相同的?