2016-11-20 3 views
0

Was ich tun möchte, ist (ähnlich):Artikel hinzufügen automatisch nach wenigen Sekunden zur Listenansicht

for(i=0;i<20;i++) { 
    list.add(i); 
    listview.setAdapter(...); 
    //equivalent sleep method 
} 

Die Zahlen werden auf die Listenansicht nach wenigen Sekunden dynamisch hinzugefügt werden. Was ich getan habe bisher:

int i = 1; 
    while (i<20) { 
     generate(i); 

     Handler handler = new Handler(); 

     handler.postDelayed(new Runnable() { 
      @Override 
      public void run() { 
       if (list != null && list.size() > 0) { 
        listView.setAdapter(new MyCustomAdapter(context,list)); 
       } else if (list.size() == 0) { 

       } 
      } 
     }, 10000); 
     i++; 
    } 

Aber alle Zahlen auf einmal nach wenigen Sekunden zeigt. In Java habe ich es getan, indem ich das Panel jedes Mal dem Rahmen hinzugefügt habe. Was soll ich für Android tun?

Antwort

1

Sie buchen alle verzögerten gleichzeitig mit derselben verzögerten Zeit, so dass sie alle zur gleichen Zeit ausgeführt werden. Die einfache Lösung ist, den 10000 Wert zu 10000 * i zu ändern. Die korrektere Lösung wäre, nur einen runnable zu veröffentlichen, und der runnable selbst, posts den nächsten. Auf diese Weise haben Sie nicht alle Runnable im Speicher gleichzeitig.
Darüber hinaus ist nicht klar aus Ihrem Code, wo Sie das Element zur Liste hinzufügen. Es scheint, dass Sie es in der Schleife hinzufügen, nicht in der ausführbaren Datei, also sind sie alle bereits in der Liste vor den ersten ausführbaren Läufen. Sie sollten es in die ausführbare Datei verschieben. Außerdem sollten Sie nicht für jede Iteration einen neuen Adapter erstellen. Sie sollten Ihren Adapter ändern, um eine Funktion namens addItem() zu haben, und es sollte das Element zu seiner Liste hinzufügen und dann notifyDatasetChanged aufrufen.

0

Ich denke, das ist, was Sie suchen. Sie müssen bei Gültigkeitsbereichen einiger Variablen vorsichtig sein.

Handler handler = new Handler(); 

MyCustomAdapter myCustomAdapter = new MyCustomAdapter(context,list); 
listView.setAdapter(myCustomAdapter); 
Runnable runnable = new Runnable() { 
    @Override 
    public void run() { 
     generate(i); 
     if (i < 20) { 
      if (list != null && list.size() > 0) { 
       list.add(String.valueOf(i)); 
       myCustomAdapter.notifyDataSetChanged(); 
       handler.postDelayed(this, 10000); 
      } else if (list.size() == 0) { 

      } 
      i++; 
     } else { 
      handler.removeCallbacks(this); 
     } 
    } 

}; 
handler.post(runnable); 
Verwandte Themen