2017-02-18 6 views
0

fireviewクエリのデータでリストビューを埋めようとしています。私のコード:firebaseクエリからリストビューを作成する

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

しかし、レイアウトに行くとき、このリストビューは空です。しかし、私が別のレイアウトに行き、それからgoal_listレイアウトに戻った場合、リストビューには私が必要とするすべての要素が含まれています。何が問題になりますか?

答えて

1

データはFirebaseから非同期にロードされます。リストビューを再描画する必要があることをAndroidに警告するには、アダプタのデータを変更した後にnotifyDataSetChanged()に電話する必要があります。

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

この作品を作るために、あなたは活動の `メンバーフィールドにarrayAdapterを作成する必要があります

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

ありがとうございました!それは動作します – DzouSi

+0

良いです。私の答えが役に立つなら、その左側のupvoteボタンをクリックしてください。あなたの質問に答えた場合は、チェックマークをクリックしてそれを受け入れます。そうすれば、他の人はあなたが(十分に)助けられたことを知ることができます。 –

関連する問題