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

我正在尝试建立一个简单的聊天界面。当用户单击时,enter他们的消息将发送到服务器,添加到数据库,并同时插入到MessageAdapter客户端设备上的消息中,从而使其出现在他们的屏幕上。

对于非用户,来自用户的消息是右对齐的,反之亦然。

当用户发送一条消息时,与所有消息上移一个位置相反,文本上移而不是实际消息对象上移。

我正在尝试让用户发送一条消息,并且所有先前的消息都有效地向上移动,以便新消息可以显示在下面。

http://img1.mukewang.com/60adeecb000136b706740531.jpg

http://img1.mukewang.com/60adeed60001d97b06750456.jpg

最初,非用户消息是,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 MainActivity

public 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

@Override

public 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();

谢谢你的帮助 :)


慕神8447489
浏览 118回答 1
1回答

慕慕森

可能是因为您要像这样添加数据:this.data.add(item);this.message_type.add(0, message_type);您在列表的开头添加类型,但是在列表的末尾添加数据,因此数据看起来好像有所变化。用这个:this.data.add(0,item);this.message_type.add(0, message_type);&nbsp;或这个:this.data.add(item);this.message_type.add(message_type);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java