我正在尝试创建一个聊天机器人。我需要模拟来自应用程序的交互式响应。响应并非来自它嵌入在应用程序中的服务器。 我使用 recycleview 来实现聊天用户界面,我需要在特定时间内延迟每条消息,以便用户感觉有人正在与他交谈。
private void displayNewMessage(ArrayList<ChatMessage> messages) {
for (int i = 0; i < messages.size(); i++) {
chatMessages.add(messages.get(i));
}
adapter.notifyDataSetChanged();
}
上一个方法用于将一组消息推送给用户,如何延迟将每个元素添加到适配器。或者将它们全部推送到适配器并延迟将它们显示在适配器中?
我尝试使用Handler但它没有工作,它会延迟所有消息并将它们全部推送到一起。
答案 0 :(得分:2)
这不仅仅是编程,而是一个逻辑问题。
首先为什么it delays all messages and pushes them all together
- 因为for循环,它会立即将它们添加到适配器。
另一种解决方案是在用户发送消息线程的其他地方使用处理程序。
假设我们有用户sendMessageButton
我们可以在那里做一些很好的逻辑。
我们会添加消息和等待时间,您可以Random
时间,例如:
sendMessageButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
chatMessages.add(newMessage);
adapter.notifyDataSetChanged();
}
},random);
}
});
答案 1 :(得分:0)
在将数据添加到arrat之后的for循环中,在delayedler上放置delayedpost并在run方法中调用notify,这将模拟每条消息的延迟,而不是延迟,然后立即显示所有消息
答案 2 :(得分:0)
你可以使用Handler.post延迟(new Runnable(),3000); 你把你的代码放在他们的runnable接口运行方法下,它将在延迟秒后开始。