您好我试图从数据库中检索列表并将其添加到ListView,我的问题是仅在onResume()之后触发事件,因此onCreate()函数中的数组为空。我想在onCreate()函数上检索数据并在这里创建我的ListView代码。
公共类MainActivity扩展了AppCompatActivity {
private DatabaseReference mDatabase = FirebaseDatabase.getInstance().getReference("projetos");
private DatabaseReference mProjetoReference;
private ChildEventListener mProjetoListener;
private List<Projeto> projetos;
ListView listaProjetos;
ProjetoDAO projetoDAO;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
projetos = new ArrayList<Projeto>();
mDatabase.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Projeto projeto = new Projeto();
for(DataSnapshot postSnapShot : dataSnapshot.getChildren()){
projeto = postSnapShot.getValue(Projeto.class);
projetos.add(projeto);
}
//Log.i("TESTEList", "projetos tamanho = " + projetos.size());
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
listaProjetos = findViewById(R.id.lista);
ArrayAdapter<Projeto> adapter = new ArrayAdapter<Projeto>(this, android.R.layout.simple_list_item_1, projetos);
listaProjetos.setAdapter(adapter);
}
@Override
protected void onStart() {
super.onStart();
}
我不知道我的问题是否清楚,英语不是我的第一语言。
答案 0 :(得分:1)
当您拥有要创建适配器的数据时,在for
循环后移动列表和适配器的代码
// for future , accessible in other methods
ArrayAdapter<Projeto> adapter
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
projetos = new ArrayList<Projeto>();
// for efficiency, time consuming so do it early
listaProjetos = findViewById(R.id.lista);
mDatabase.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Projeto projeto = new Projeto();
for(DataSnapshot postSnapShot : dataSnapshot.getChildren()){
projeto = postSnapShot.getValue(Projeto.class);
projetos.add(projeto);
}
adapter = new ArrayAdapter<Projeto>(MainActivity.this, android.R.layout.simple_list_item_1, projetos);
// Note : inside anonymous classes use
// ActivityName.this for context
listaProjetos.setAdapter(adapter);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}