【发布时间】:2017-11-03 08:21:08
【问题描述】:
该应用通过OnDataChange 从 Firebase 获取一个数组列表并拥有OnItemSelected,但不幸的是它不会调用。 (实际上微调器正在从 Firebase 数据库中获取字符串。)
我已经使用本地数组列表测试了代码,OnItemSelected 有效。
为什么?
这些是我的功能:
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();
}
【问题讨论】:
-
微调器是否填充了数据列表?如果那是在主标题上,你不应该这样做
Thread.sleep(4000);。 -
是的,你可以在这里看到完整的代码:pastebin.com/hSH0dfuB
-
你在主线程上做
Thead.sleep(4000);,你应该在加载时等待回调中的数据。
标签: java android firebase arraylist spinner