2017-02-18 3 views
0

Ich versuche, meine Listenansicht mit Daten aus der Firebase-Abfrage zu füllen. Mein Code:Erstellen einer Listenansicht aus der Firebase-Abfrage

public class ShowGoalsListActivity extends AppCompatActivity { 

DatabaseReference mDatabase = FirebaseDatabase.getInstance().getReference(); 
DatabaseReference messages = mDatabase.child("messages"); 
ArrayList<String> NameList = new ArrayList<String>();; 
public void onCreate(Bundle saveInstanceState) 
{ 
    super.onCreate(saveInstanceState); 
    setContentView(R.layout.goals_list); 
    ListView animalList=(ListView)findViewById(R.id.listViewAnimals); 

    getNames(); 

    ArrayAdapter<String> arrayAdapter = 
      new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, NameList); 
    animalList.setAdapter(arrayAdapter); 

    animalList.setOnItemClickListener(new AdapterView.OnItemClickListener() 
    { 
     public void onItemClick(AdapterView<?> arg0, View v,int position, long arg3) 
     { 
      String selectedAnimal=NameList.get(position); 
      Toast.makeText(getApplicationContext(), "Animal Selected : "+selectedAnimal, Toast.LENGTH_LONG).show(); 
     } 
    }); 
} 

void getNames() 
{ 

    Query queryRef = messages.orderByChild("pages"); 
    queryRef.addChildEventListener(new ChildEventListener() { 
     @Override 
     public void onChildAdded(DataSnapshot dataSnapshot, String s) { 
      Map data = (Map) dataSnapshot.getValue(); 
      String name = (String) data.get("name"); 
      NameList.add(name); 
     } 
     @Override 
     public void onChildRemoved(DataSnapshot dataSnapshot){ 
     } 
     @Override 
     public void onCancelled(DatabaseError databaseError){} 
     @Override 
     public void onChildChanged(DataSnapshot dataSnapshot, String s1){} 
     @Override 
     public void onChildMoved(DataSnapshot dataSnapshot, String s2){} 
    }); 
} 
} 

Aber wenn ich zu meinem Layout gehe, ist diese Listenansicht leer. Aber wenn ich dann zu einem anderen Layout gehe und dann zu goals_list zurückkehre, enthält listview alle Elemente, die ich brauche. Was kann ein Problem sein?

Antwort

1

Die Daten werden asynchron aus Firebase geladen. Um Android darauf hinzuweisen, dass die Listenansicht neu gezeichnet werden muss, müssen Sie notifyDataSetChanged() aufrufen, nachdem Sie die Daten des Adapters geändert haben.

public void onChildAdded(DataSnapshot dataSnapshot, String s) { 
     Map data = (Map) dataSnapshot.getValue(); 
     String name = (String) data.get("name"); 
     NameList.add(name); 
     arrayAdapter.notifyDataSetChanged(); 
    } 

Um diese Arbeit zu machen, müssen Sie arrayAdapter in `Mitglied Feld der Tätigkeit machen:

public class ShowGoalsListActivity extends AppCompatActivity { 
    ArrayAdapter<String> arrayAdapter; 
    ... 
+0

Vielen Dank! Es funktioniert – DzouSi

+0

Gut zu hören. Wenn meine Antwort nützlich war, klicken Sie auf den Upvote-Button links davon. Wenn es Ihre Frage beantwortet hat, klicken Sie auf das Häkchen, um es zu akzeptieren. Auf diese Weise wissen andere, dass Ihnen (ausreichend) geholfen wurde. –

Verwandte Themen