如何延迟向Recyclerview适配器添加元素?

时间:2017-09-01 18:41:23

标签: java android android-recyclerview

我正在尝试创建一个聊天机器人。我需要模拟来自应用程序的交互式响应。响应并非来自它嵌入在应用程序中的服务器。 我使用 recycleview 来实现聊天用户界面,我需要在特定时间内延迟每条消息,以便用户感觉有人正在与他交谈。

   private void displayNewMessage(ArrayList<ChatMessage> messages) {
        for (int i = 0; i < messages.size(); i++) {
            chatMessages.add(messages.get(i));
        }
        adapter.notifyDataSetChanged();


    }

上一个方法用于将一组消息推送给用户,如何延迟将每个元素添加到适配器。或者将它们全部推送到适配器并延迟将它们显示在适配器中?

我尝试使用Handler但它没有工作,它会延迟所有消息并将它们全部推送到一起。

3 个答案:

答案 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接口运行方法下,它将在延迟秒后开始。