2017-09-01 2 views
1

Ich versuche einen Chat-Bot zu erstellen. Ich muss eine interaktive Antwort von App simulieren.Die Antwort kommt nicht von Server es ist in App eingebettet. Ich benutze recycleview Chat-UI zu implementieren, muss ich jede Nachricht für eine bestimmte Zeit zu verzögern, so Benutzer fühlt, dass jemand tatsächlich mit ihm spricht.Wie verzögert man das Hinzufügen von Elementen zum Recyclerview-Adapter?

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


    } 

wird das vorherige Verfahren verwendet eine Reihe von Nachrichten an Benutzer zu schieben, wie kann ich jedes Element Zugabe an Adapter verzögern. oder drücken Sie alle auf Adapter und verzögern die Anzeige in Adapter selbst?

Ich habe versucht, Handler zu verwenden, aber es hat nicht funktioniert, es verzögert alle Nachrichten und schiebt sie alle zusammen.

Antwort

0

In Ihrer for-Schleife Daten nach dem Hinzufügen setzen delayedpost auf Recycler arrat und innerhalb der run-Methode informieren aufrufen, diese Verzögerung für jede Nachricht simulieren, statt Verzögerung und dann alle Nachrichten auf einmal

0

zeigen Sie verwenden können Handler.post delay (neues Runnable(), 3000); Sie setzen Ihren Code unter ihre runable Oberfläche Run-Methode, die mit nach Sekunden Verzögerung beginnt.

+0

Die gesamte Reaktion wird für die Verzögerung Sekunden verzögert werden, aber dann wird es alle zusammen geschoben werden, um den Adapter. Dies ist nicht simuliert echten Chat –

2

Es ist eine logische Frage mehr als Programmierung.

Zuerst warum it delays all messages and pushes them all together - weil die for-Schleife, es wird sie auf einmal Adapter hinzufügen.

Eine alternative Lösung besteht darin, den Handler für einige andere zu verwenden, wenn der Benutzer einen Nachrichten-Thread sendet.

angenommen, wir haben den Benutzer sendMessageButton wir können einige nette Logik dort machen.

Wir werden Meldung hinzufügen und eine Zeit für Wartezeit, können Sie es Random Zeit machen, z:

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

     } 
    }); 
+0

Das Problem, dass es nicht eine Nachricht ist, ist es ein Array von Nachrichten, es ist so etwas wie Google Assistant, der Benutzer hat Auswahlmöglichkeiten und wenn er eines von ihnen wählt die Wahl zu einer Methode zu bestimmen die passende Antwort und eine Liste der Nachrichten zurückgeben. Ihre Lösung ist in Ordnung, wenn der Benutzer eine Schaltfläche wie "next" hat, so dass wir die Verzögerung beim Klick auf die Schaltfläche –

+0

@KhaledAbdElnaser verwalten können, dann müssen Sie uns mitteilen, wie Sie 'displayNewMessage' in Ihrem Code verwendet haben. – Ibrahim

Verwandte Themen