android - 在recyclerview列表中添加项目时,它将更改聊天室中的所有消息,底部已经可用的消息
问题描述
我已经使用 recyclerview 来显示所有列表。此处聊天消息已添加到列表中。它被添加了,但 UI 中显示的消息是我已经添加的最后一条消息。
为什么所有列表都随着列表中的最后一条消息而更改。
注意:它没有显示我最近发送的消息
Chat Fragment:
private final MyMessageModel[] msglist = new ArrayList<>().toArray(new MyMessageModel[0]);
public void onviewCreated() {
mSendMsg.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String msgContent = mSendMsgInputBox.getText().toString();
if(!TextUtils.isEmpty(msgContent))
{
execute(new PostMessageRequest( msgContent,getmId()), mPostMessageListener);
int i1 = msharedprefs.getInt(msgContent, 0);
i1 += 1;
SharedPreferences.Editor editor = msharedprefs.edit();
editor.putInt(msgContent, i1);
editor.commit();
int newMsgPosition = messagesList.size();
System.out.println("newMsgPosition ==" + newMsgPosition);
// Notify recycler view insert one new data.
mAdapter.setData(msglist);
// Scroll RecyclerView to the last message.
//mChatMessageRecyclerView.scrollToPosition(0);
mSendMsgInputBox.setText("");
mAdapter.notifyDataSetChanged();
}
}
});
My Adapter:
private static final int VIEW_TYPE_MESSAGE_SENT = 1;
private static final int VIEW_TYPE_MESSAGE_RECEIVED = 2;
private List<MyMessageModel> msgDtoList;
MyMessageModel msgDto = this.msgDtoList.get(position);
@Override
public int getItemViewType(int position) {
MyMessageModel message = (MyMessageModel) msgDtoList.get(position);
if (message.getId().equals(Profile.getId())) {
// If the current user is the sender of the message
return VIEW_TYPE_MESSAGE_SENT;
} else {
// If some other user sent the message
return VIEW_TYPE_MESSAGE_RECEIVED;
}
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view;
if (viewType == VIEW_TYPE_MESSAGE_SENT) {
view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.sender_message_layout, parent, false);
return new SenderMessageHolder(view);
} else if (viewType == VIEW_TYPE_MESSAGE_RECEIVED) {
view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.receiver_message_layout, parent, false);
return new ReceiverMessageHolder(view);
}
return null;
}
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
LastMessageContent message = (LastMessageContent) msgDtoList.get(position);
switch (holder.getItemViewType()) {
case VIEW_TYPE_MESSAGE_SENT:
populateSentViewHolder(holder, position); break;
case VIEW_TYPE_MESSAGE_RECEIVED:
populateReceivedViewHolder(holder, position);
}
@SuppressLint("ResourceAsColor")
private void populateSentViewHolder(RecyclerView.ViewHolder holder, int position) {
MyMessageModal msgDto = this.msgDtoList.get(position);
((SenderMessageHolder) holder).rightMsgTextView.setText(msgDto.getmMSg());
}
@SuppressLint("ResourceAsColor")
private void populateReceivedViewHolder(RecyclerView.ViewHolder holder, int position) {
MyMessageModal msgDto = this.msgDtoList.get(position);
((ReceiverMessageHolder) holder).leftMsgTextView.setText(msgDto.getmMSg());
}
解决方案
推荐阅读
- python - how to calculate the mean of an array using grouping variables in python?
- android - 离线模式下基于距离的聚类
- c++ - std::async,std::promise 和 std::packaged_task 会阻塞主线程。它们的含义是什么?
- wordpress - 如果未设置属性,则隐藏短代码的特定部分
- javascript - 获取标记但 lat & lng 为空 - vue.js
- php - Codeigniter 路由抛出 404 page not found 错误
- reactjs - 无法从库中导入反应组件
- wix - 如何在不使用 c# 的情况下使用 wix 安装程序将 .msi 安装到远程虚拟机
- jquery - jQuery比较表单输入数组,颜色差异
- reactjs - 滑动最近在 Chrome 移动设备上停止工作