我只想向所有用户中的一个用户显示一个按钮。
我尝试了orderByKey()
,但没有成功!
用户模型具有id成员,我尝试使用orderByChild("id")
,但结果相同!
我甚至尝试了以下技巧!
int times=0; //class varaible
usersListener = new ChildEventListener() {
@Override
public void onChildAdded(@NonNull DataSnapshot ds, String ss) {
OnlineUser ou = ds.getValue(OnlineUser.class);
if (ou == null) return;
if (times == 0 && myId.equals(ou.id)) {
times++;
button.setVisibility(View.VISIBLE);
}
}
//rest of the code
例如:如果子级(用户)列表包含4个成员,我想仅向一个人显示按钮,或仅向第一位插入数据的人显示该按钮。我不想在用户模型中使用timeStamp节点。
答案 0 :(得分:1)
您可能正在寻找的是Firebase Query
,它使您能够根据需要找到孩子。在这里看一下文档:
https://firebase.google.com/docs/reference/android/com/google/firebase/database/Query
看看addListenerForSingleValueEvent
方法。
答案 1 :(得分:1)
首先(在xml中)将按钮的可见性设置为“ gone”,然后实施类似以下的代码:
int times=0; //class varaible
usersListener = new ChildEventListener() {
@Override
public void onChildAdded(@NonNull DataSnapshot ds, String ss) {
OnlineUser ou = ds.getValue(OnlineUser.class);
if (ou == null) return;
if (times == 0 && myId.equals(ou.id)) {
times++;
button.setVisibility(View.VISIBLE);
}
}
将无法仅向第一位用户显示按钮。由于该按钮的可见性属性现在设置为可见,因此该按钮对所有用户都是可见的。因此,它将对每个子元素/用户可见。
您丢失了再次将可见性重置为“消失”的机会。因此,我建议您遵循以下代码:
int times=0; //class varaible
usersListener = new ChildEventListener() {
@Override
public void onChildAdded(@NonNull DataSnapshot ds, String ss) {
OnlineUser ou = ds.getValue(OnlineUser.class);
if (ou == null) return;
if (times == 0 && myId.equals(ou.id)) {
times++;
button.setVisibility(View.VISIBLE);
} else {
button.setVisibility(View.GONE);
}
}
//rest of the code