我正在尝试建立一个简单的聊天界面。当用户单击时,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 回答
![?](http://img1.sycdn.imooc.com/5458655200013d9802200220-100-100.jpg)
慕慕森
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);
添加回答
举报
0/150
提交
取消