Я думаю, это из-за того, что reference.addValueEventListener
запускается после создания alertDialog. потому что addValueEventListener
запускается только после того, как addValueEvent
произошло, поэтому в вашем коде пустой список был передан в ваш alertDialog и затем отображается, после чего данные были получены и reference.addValueEventListener
было запущено. Вы должны создать alertDialog после того, как все ваши данные были получены, не раньше.
например, вы должны знать количество ваших результатов и подсчитывать извлеченные данные в методе onDataChange
, и просто показывать alertDialog, когда число fetchData достигает ожидаемого количества.
list = new ArrayList<>();
int execptedResult = NUMBER_OF_RESULT; // <--- you must fetch data from firebase in some way, it depends on your implementation
int fetchCount = 0;
DatabaseReference reference = FirebaseDatabase.getInstance().getReference().child("FacultyMember");
reference.addValueEventListener(new ValueEventListener()
{
@Override
public void onDataChange(DataSnapshot dataSnapshot)
{
for (DataSnapshot ds : dataSnapshot.getChildren())
{
fetchCount++;
String Name = ds.child("Name").getValue().toString();
list.add(Name);
Toast.makeText(getApplicationContext(),Name,Toast.LENGTH_LONG).show();
if(fetchCount == execptedResult){
AlertDialog.Builder builder =new AlertDialog.Builder(AdminHome.this);
builder.setTitle("Member List");
builder.setIcon(R.drawable.ic_format_list_bulleted_black_24dp);
builder.setItems(list.toArray(new String[0]), new
DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialogInterface, int i)
{
}
});
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});