为了账号安全,请及时绑定邮箱和手机立即绑定

向适配器添加新数据会影响初始值

向适配器添加新数据会影响初始值

慕神8447489 2021-05-19 22:13:15
我正在尝试建立一个简单的聊天界面。当用户单击时,enter他们的消息将发送到服务器,添加到数据库,并同时插入到MessageAdapter客户端设备上的消息中,从而使其出现在他们的屏幕上。对于非用户,来自用户的消息是右对齐的,反之亦然。当用户发送一条消息时,与所有消息上移一个位置相反,文本上移而不是实际消息对象上移。我正在尝试让用户发送一条消息,并且所有先前的消息都有效地向上移动,以便新消息可以显示在下面。最初,非用户消息是,Hello但是在我发送用户消息之后,非用户下方的消息Hey取代了它。这是我的代码MessageAdapter:public class MessageAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {List<Message> data= Collections.emptyList();List<Integer> message_type= Collections.emptyList();// create constructor to initialize context and data sent from MainActivitypublic MessageAdapter(List<Message> data, List<Integer> message_type) {    this.data=data;    this.message_type=message_type;}public void addItem(Message item, int message_type){    this.data.add(item);    this.message_type.add(0, message_type);}// Inflate the layout when ViewHolder created@Overridepublic RecyclerView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {    switch (i) {        case 0:            View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.message_non_user, viewGroup, false);            return new ViewHolder0(v);        case 2:            View q = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.message_user, viewGroup, false);            return new ViewHolder1(q);    }    View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.message_non_user, viewGroup, false);然后,这是代码send-message action: Message user_input = new Message(); user_input.message = chat_input.getText().toString(); messageAdapter.addItem(user_input, 0); messageAdapter.notifyItemInserted(messageAdapter.getItemCount()+1); MessagesRecyclerview.scrollToPosition(messageAdapter.getItemCount() - 1); messageAdapter.notifyDataSetChanged(); chat_input.getText().clear();谢谢你的帮助 :)
查看完整描述

1 回答

?
慕慕森

TA贡献1856条经验 获得超17个赞

可能是因为您要像这样添加数据:


this.data.add(item);

this.message_type.add(0, message_type);

您在列表的开头添加类型,但是在列表的末尾添加数据,因此数据看起来好像有所变化。用这个:


this.data.add(0,item);

this.message_type.add(0, message_type); 

或这个:


this.data.add(item);

this.message_type.add(message_type);


查看完整回答
反对 回复 2021-05-26
  • 1 回答
  • 0 关注
  • 117 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信