我有如下的Firebase数据。单击ListView时,我想在textview中显示键。
我尝试使用以下代码从折扣中获取钥匙
private void getKeyValues(){
databaseReference = FirebaseDatabase.getInstance().getReference().child("promotion").child("discount");
databaseReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String key = dataSnapshot.getKey();
for (DataSnapshot child: dataSnapshot.getChildren()){
//Object object = child.getKey();
labelGetKey.setText(child.getKey());
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
Log.e("Read Fail", "Error");
}
});
}
它正在工作,但是仅获得最后一个键并在textview中显示。第一个键或其他键未显示。 这是我的listview代码
private void retrieveDataShowListView(){
// Array List and Adapter for Message ListView;
final ArrayList<String> arrayList = new ArrayList<>();
final ArrayAdapter<String> adapter;
databaseReference = FirebaseDatabase.getInstance().getReference().child("promotion").child("discount");
adapter = new ArrayAdapter<>(this,android.R.layout.simple_list_item_1,arrayList);
listViewPromotion.setAdapter(adapter);
listViewPromotion.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
String showValue = String.valueOf(parent.getItemAtPosition(position));
editTextPromotion.setText(showValue);
// Display Key from Database
getKeyValues();
}
});
databaseReference.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
String strLocation = dataSnapshot.getValue(String.class);
arrayList.add(strLocation);
adapter.notifyDataSetChanged();
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
String string = dataSnapshot.getValue(String.class);
arrayList.remove(string);
adapter.notifyDataSetChanged();
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {}
@Override
public void onCancelled(DatabaseError databaseError) {}
});
}
您能帮我解决我的代码有什么错误吗?谢谢!
答案 0 :(得分:1)
好的,您只需要做的一件事,
private void getKeyValues(){
databaseReference = FirebaseDatabase.getInstance().getReference().child("promotion").child("discount");
databaseReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String key = dataSnapshot.getKey();
String dataKeys=";
for (DataSnapshot child: dataSnapshot.getChildren()){
//Object object = child.getKey();
dataKeys=dataKeys+child.getKey() + "";
}
labelGetKey.setText(dataKeys);
}
@Override
public void onCancelled(DatabaseError databaseError) {
Log.e("Read Fail", "Error");
}
});
}
您的键每次在for循环中都会被覆盖。因此,您必须将每个位置的每个键存储在字符串中并追加。因此,您将在String dataKeys中获得最终的键值。
因此,要获取所选列表视图项目的字符串,可以按项目位置获得,例如position为= 2;
所以,您可以这样做
int counter=0;
for (DataSnapshot child: dataSnapshot.getChildren()){
//Object object = child.getKey();
if(counter==position-1){
dataKeys=child.getKey();
break;
}
counter++;
}
labelGetKey.setText(dataKeys);
通过这种方式,您可以通过传递列表项的位置来找到所选项的键。我希望你能明白。
答案 1 :(得分:0)
我不知道这是您要完成的工作,但是,您可以在设置textView的最里面的for循环中构建一个字符串。
filterMap = map;
但是,这是一个非常糟糕的方法。如果要单独显示每个键,可以尝试在ListView布局中使用另一个 ListView 。除了可视化之外,这种方法不允许您单独使用每个键。
希望这会有所帮助。