在应用程序中,我有一个旋转器,旋转器有一些选项,这个选项存储在firebase中,这个选项显示得很好,但是当我单击spinner项时,它在数据库的textview中显示了一些字符串。但什么都没显示出来。假设我有两个数据,第一个是名称,第二个是年龄,我在spinner项中显示名称,当我单击spinner时,它在文本视图中显示年龄。
list = new ArrayList<>();
retriveData();
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int position, long l) {
String selected = list.get(position).toString();
Log.e("Clicked:",""+selected);
reference.child("result").child(selected).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
for (DataSnapshot ds : snapshot.getChildren()) {
String fAge = ds.child("age").getValue(String.class);
tv_1st.setText(fAge);
}
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
}
});
}
public void retriveData() {
reference.child("result").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
list.clear();
for (DataSnapshot item : snapshot.getChildren()) {
list.add(item.child("name").getValue().toString());
}
adapter = new ArrayAdapter<String>(MainActivity.this, R.layout.spinner_style, list);
Collections.reverse(list);
spinner.setAdapter(adapter);
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
}我的数据库结构

如何在文本视图中显示这些数据?
发布于 2020-07-25 15:12:17
在为适配器从数据库中读取数据时,应保留所需的所有数据。这包括名称、年龄以及键,如果您想要更新/删除数据,就需要这个键。这也使您不必在用户选择旋转器中的项目时进行额外的数据加载,因为应用程序中已经有了所有的数据。
最好的方法是保留一个DataSnapshot对象数组,而不仅仅是一个名称数组。然后,在旋转器的布局中,您只需从每个name中获得DataSnapshot属性,就像您现在在onDataChange中所做的那样。
一种不太漂亮的方法,但根据当前代码更容易显示,是将名称、年龄和键保存在一组数组中:
nameList = new ArrayList<>();
ageList = new ArrayList<>();
keyList = new ArrayList<>();然后在加载数据时填充所有这些内容:
reference.child("result").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
list.clear();
for (DataSnapshot item : snapshot.getChildren()) {
nameList.add(item.child("name").getValue(String.class));
ageList.add(item.child("age").getValue(Long.class));
keyList.add(item.getKey());
}
adapter = new ArrayAdapter<String>(MainActivity.this, R.layout.spinner_style, nameList);
Collections.reverse(nameList);
spinner.setAdapter(adapter);
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
throw error.toException(); // never ignore erros
}
});现在,当用户单击旋转器中的项时,可以根据所选项的索引查找相应的年龄和键:
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int position, long l) {
String selected = nameList.get(position).toString();
Log.e("Clicked:",""+selected);
String fAge = ageList.get(position).toString();
tv_1st.setText(fAge);
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
}
});https://stackoverflow.com/questions/63084920
复制相似问题