嗨,我正在开发诸如whatsapp之类的聊天应用程序。当用户像WhatsApp中的用户向下滚动时,我必须从API加载聊天历史记录。我获取数据并将其设置为适配器。但是历史记录在回收器视图的底部加载。我需要在每个滚动中将其添加到顶部。这是我的代码。请帮我。预先感谢。
if (Status.equals("1")) {
historyList = resp.getHistory();
Log.i("history size",String.valueOf(resp.getHistory().size()));
String historysize = String.valueOf(resp.getHistory().size());
Message message = new Message();
for (int i = 0; i < resp.getHistory().size(); i++) {
String fromusertoken = String.valueOf(resp.getHistory().get(i).getFromUserToken());
String txtmsg = resp.getHistory().get(i).getMessage();
String username = String.valueOf(resp.getHistory().get(i).getFromUserName());
if (fromusertoken.equals(user_token)) {
Message messages = new Message();
messages.setUser_token(fromusertoken);
messages.setUsername(username);
messages.setIsMine(true);
messages.setMessage(txtmsg);
messageAdapter.add(messages);
}
else {
Message messages = new Message();
messages.setUser_token(fromusertoken);
messages.setUsername(username);
messages.setIsMine(false);
messages.setMessage(txtmsg);
messageAdapter.add(messages);
}
}
messageAdapter.notifyDataSetChanged();
onItemsLoadComplete();
Toast.makeText(Single_chat.this, msg, Toast.LENGTH_SHORT).show();
}
} else {
Toast.makeText(Single_chat.this, msg, Toast.LENGTH_SHORT).show();
}
}
} else {
Toast.makeText(Single_chat.this, "No Response", Toast.LENGTH_SHORT).show();
}
}
有一种方法可以通过编辑适配器类而不是活动来设置项目。我们必须添加诸如messagelist.add(0,message)
之类的项目列表。现在只有我找到。对于常规聊天,您必须像messagelist.add(message)
一样添加正常。这将在底部添加项目。希望这对他人有用。
public void add(Message message) {
messageList.add(message);
notifyItemInserted(messageList.size() - 1);
}
public void add(int i,Message message) {
messageList.add(0,message);
notifyItemInserted(messageList.size() - 1);
}
我将适配器中的列表更改为messagelist.add(0,message)
。它起作用。
public void add(Message message) {
messageList.add(0,message);
notifyItemInserted(messageList.size() - 1);
}
您可以在索引0
上插入历史记录消息 messageAdapter.add(0,messages);
每次迭代都将通过最后插入的消息替换第一条消息。
chatHistoyList.add(adapter.getCurrentChatList());
adapter.setData(chatHistoryList);
adapter.notifyDataSetChanged();
//This method has to be in adapter
public List<Chat> getCurrentChatList() {
return currentChatList;
}