2016-06-26 7 views
0

ich ein Fragment nennen, und dies hat eine Basis von Firebase für eine Liste zu füllen, und ich rufe es so:zeigt eine Datenbank von Firebase in einem Arraylist aus einem Fragmente

private void getClients() { 
    FirebaseDatabase database = FirebaseDatabase.getInstance(); 
    DatabaseReference myRef = database.getReference("client"); 
    myRef.addValueEventListener(valueEventListener); 
} 

ValueEventListener valueEventListener = new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot){ 
     readClients(dataSnapshot); 
    } 
    @Override 
    public void onCancelled(DatabaseError error) {} 
}; 

private void readClients(DataSnapshot dataSnapshot) { 
    for(DataSnapshot dss: dataSnapshot.getChildren()){ 
     Client client = dss.getValue(Client.class); 
     listClients.add(client); 
    } 
} 

Ich habe versucht, Rufen Sie getClients aus createView, onStart und onResume auf, aber zeigen Sie mir die Liste nicht mit den Daten, nur wenn ich diese App minimiere oder für andere Apps ändere und ich die App wieder öffne, zeigt die Liste die Daten an. Wie rufe ich die Datenbank auf oder zeige sie an, erscheint sofort das Fragment?

+3

Anruf adapter.notifyDataSetChanged() auf Listview-Adapter nach der for-Schleife –

+0

Danke !!!! Das ist die Antwort – anfehernandez94

+1

@hello_world Ich sehe Sie die Antwort gelöscht, die Sie gaben. Aber da das die richtige Antwort ist, können Sie es erneut posten (oder wiederherstellen). Wenn Sie beispielsweise einen Link zur Dokumentation von 'notifyDataSetChanged()' und vielleicht sogar ein Beispiel-Snippet hinzufügen, wird es vollkommen akzeptabel sein und Ihnen helfen, Reputation zu erlangen. –

Antwort

1

Anruf listviewAdapter.notifyDataSetChanged() auf ListView-Adapter nach For-Schleife.

Ihr Adapter für die Listview wird gesetzt, bevor die listClients sich füllt, und daher ist Ihre Liste leer.

Die notifyDataSetChanged() bewirkt, dass der Listview selbst in listClients

private void readClients(DataSnapshot dataSnapshot) { 
    for(DataSnapshot dss: dataSnapshot.getChildren()){ 
     Client client = dss.getValue(Client.class); 
     listClients.add(client); 
    } 
listviewAdapter.notifyDataSetChanged() 
} 

bevölkert mit den neuen Werten aktualisieren Überprüfen Sie die docs für weitere Informationen aus