android - FirebaseRecyclerAdapter 没有滚动到底部
问题描述
我正在使用 FirebaseRecyclerAdapter 在 recyclerView 中显示消息的聊天活动,我的问题是在发送或接收消息时滚动到底部,有时它滚动到底部但大部分时间我必须手动滚动
我想我没有做出指示:recyclerView.scrollToPosition(recyclerView.getAdapter().getItemCount());
在正确的位置
你能给我一个解决方案吗?!
这是我的适配器:
@Override
protected void onStart() {
super.onStart();
try {
recyclerView.scrollToPosition(recyclerView.getAdapter().getItemCount());
}catch (NullPointerException e){}
FirebaseRecyclerAdapter<Message,MessageViewHolder> FBRA1 = new FirebaseRecyclerAdapter<Message, MessageViewHolder>(
Message.class,
R.layout.singlemessagelayout,
MessageViewHolder.class,
refbase1
) {
@Override
protected void populateViewHolder(MessageViewHolder viewHolder, Message model, int position) {
try {
LinearLayout lin = viewHolder.l ;
RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) lin.getLayoutParams();
layoutParams.removeRule(RelativeLayout.ALIGN_PARENT_RIGHT);
layoutParams.removeRule(RelativeLayout.ALIGN_PARENT_LEFT);
layoutParams.removeRule(RelativeLayout.ALIGN_PARENT_TOP);
if (model.getSender().username.equals(senderUsername)){
layoutParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
layoutParams.addRule(RelativeLayout.ALIGN_PARENT_TOP);
lin.setBackground(getResources().getDrawable(R.drawable.rmimi));
}else {
layoutParams.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
layoutParams.addRule(RelativeLayout.ALIGN_PARENT_TOP);
lin.setBackground(getResources().getDrawable(R.drawable.mm));
}
layoutParams.setMargins(10,10,10,10);
viewHolder.setContent(model.date, model.message);
recyclerView.scrollToPosition(recyclerView.getAdapter().getItemCount());
}catch (NullPointerException e){
}
}
} ;
recyclerView.setAdapter(FBRA1);
recyclerView.scrollToPosition(recyclerView.getAdapter().getItemCount());
}
这是我的 viewHolder 类:
public static class MessageViewHolder extends RecyclerView.ViewHolder {
public View v ;
public TextView t;
public LinearLayout l ;
public MessageViewHolder(View itemView) {
super(itemView);
v = itemView ;
l = (LinearLayout)v.findViewById(R.id.mylayout) ;
t = (TextView)v.findViewById(R.id.usernameid2) ;
}
public void setContent(String date, String content) {
TextView messageContent = (TextView)v.findViewById(R.id.emailid2) ;
TextView messagesender = (TextView)v.findViewById(R.id.usernameid2) ;
messageContent.setText(content);
messagesender.setText(date);
}
}
解决方案
推荐阅读
- typescript - 每个循环的推断类型错误?
- ruby - 将 gem-maven-plugin 安装的 gem 与 AsciiDoctorJ 一起使用
- unix - 为 Bi-Weekly(每 2 周)星期四创建 Cron 表达式
- algorithm - 沿 SVG 路径绘制
- java - Android Studio XML 渲染问题 - 字符串索引超出范围:-1
- django - 在 django 应用程序的就绪函数中将请求作为参数传递
- pine-script - 止损松脚本策略不适用于交易视图?
- mysql - 协助优化以下MySql程序
- ios - 无法将 .NET 6 preview 5 MAUI Blazor App 部署到物理 iOS 设备
- kubernetes - Consul 和 Kubernetes 健康检查