我正在迭代firebase中的列表,它的工作方式类似于arrayList 我使用for循环迭代chlidrens,因为它将在列表中完成,我使用此代码随机迭代
FirebaseUtils.getMeetPeopleListCityReference(ciudadX).orderByKey().addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(final DataSnapshot dataSnapshot) {
if (dataSnapshot != null) {
Random random = new Random();
final int index = random.nextInt((int) dataSnapshot.getChildrenCount());
int count = 0;
for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
if (count == index) {
final MeetPeopleList mee = snapshot.getValue(MeetPeopleList.class);
if (mee.getIDentificador().equals(firebaseUser.getUid())) {
// nothing, are you
} else {
testData.add(mee);
adapter.notifyDataSetChanged();
return;
}
}
count++;
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
但这是重要的代码 它做的是随机迭代,这里是问题
我需要它迭代列表,不要重复将列出的对象
我将举一个例子: 代码按下按钮,按下它显示整个项目列表,屏幕上显示一个随机项目,但有时再次点击显示与之前显示的相同,我不需要显示已经显示的对象
Random random = new Random();
final int index = random.nextInt((int) dataSnapshot.getChildrenCount());
int count = 0;
for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
if (count == index) {
final MeetPeopleList mee = snapshot.getValue(MeetPeopleList.class);
if (mee.getIDentificador().equals(firebaseUser.getUid())) {
// nothing, are you
} else {
testData.add(mee);
adapter.notifyDataSetChanged();
return;
}
}
count++;
}
答案 0 :(得分:1)
在OnDataChange
商店内,还有Map<String, Boolean>
等数据结构中儿童的键。在您的代码中,您只需要初始化一个名为myMap
的新Map,并在for循环中添加此行:
myMap.put(snapshot.getKey(), true)
然后,在“随机方法”中,检查您的密钥的myMap
值是否仍为true
。然后在使用带有该键的元素后将布尔值设置为false
。