L'application obtient une liste de tableau de Firebase via OnDataChange
et a OnItemSelected
, mais malheureusement, il n'appellera pas. (En fait, le spinner obtient les chaînes de la base de données Firebase.) J'ai testé le code avec un arraylist local et OnItemSelected
fonctionne. Pourquoi?OnItemSelected ne pas appeler lorsque Spinner obtient arraylist de Firebase
Ce sont mes fonctions:
public void initSpinner() {
restartAudioSpinner();
try {
Thread.sleep(4000);
} catch (InterruptedException e) {
e.printStackTrace();
}
ArrayAdapter<String> adapter = new ArrayAdapter<String>(AddAudioItems.this, android.R.layout.simple_spinner_dropdown_item, categoriesTitle);
spinner.setAdapter(adapter);
spinner.setOnItemSelectedListener(this);
}
public void restartAudioSpinner() {
DatabaseReference database;
database = FirebaseDatabase.getInstance().getReference("Audio Categories");
database.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
categorylist = new ArrayList<String>();
for (DataSnapshot data :dataSnapshot.getChildren()) {
CategoryNew category = data.getValue(CategoryNew.class);
categoriesList.add(new CategoryNew(category.getImageUrl(),category.getTitle()));
}
for (int i = 0; i < categoriesList.size(); i++) {
categoriesTitle.add(categoriesList.get(i).getTitle());
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
Toast.makeText(AddAudioItems.this, categoriesTitle.get(i), Toast.LENGTH_SHORT).show();
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
Toast.makeText(AddAudioItems.this, "לא נבחרה שום רשומה, אנא בחר קטגוריה", Toast.LENGTH_SHORT).show();
}
Le curseur est rempli avec la liste de données? Et vous ne devriez pas faire Thread.sleep (4000), si c'est sur le sujet principal. –
Oui, vous pouvez voir le code complet ici: https://pastebin.com/hSH0dfuB – WhiteNinja
Vous faites 'Thead.sleep (4000);' Sur le thread principal, vous devriez plutôt attendre les données dans le rappel quand il est chargé. –