【发布时间】:2020-06-24 05:27:09
【问题描述】:
我的想法是允许用户在他的用户列表中添加东西。当用户点击复选框时,它会在 FireBase 数据库中创建一个包含数据的项目(我希望将来按时间对用户列表进行排序)。
我通过以下代码这样做:
favCheckBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
if(b){
//Add item
favMap.put("comicsId", comicsId);
favMap.put("comicsGenreId", comicsGenreId);
favMap.put("comicsTitle", comicsTitle);
favMap.put("time", ServerValue.TIMESTAMP);
favListRef.setValue(favMap);
}
if(!b){
//Remove item
favListRef.removeValue();
}
}
});
为了检查复选框(如果用户之前已经添加过项目)我使用代码:
//Check if already added
favListRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()){
if(dataSnapshot1.getValue() != null && !dataSnapshot1.getValue().equals("")){
//Item already added set as checked
favCheckBox.setChecked(true);
}
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) { }
});
所以一切都很好,除了每次“检查器”代码发现一个项目已经添加时,它会将复选框设置为选中,然后在数据库更新中时间(这破坏了我按时间排序的想法)。
如何使用 FireBase 数据库实现“TIMESTEAMP”的想法,而不是在每次检查后更新时间?
希望看到您的回答和建议。提前致谢。
【问题讨论】:
-
对复选框使用单击侦听器而不是 oncheck 更改:stackoverflow.com/a/14307643/2711811。这意味着 firebase 回调将其设置为已选中,但只有当用户物理单击时才会调用按钮回调。还有另一个答案,它使用复合按钮上的“isPressed”选择器使用 onCheckedChanged - 再次区分用户和代码设置复选框。
-
非常感谢。我通过 onClickListener 和一些布尔值处理它,现在它工作正常。
标签: java android firebase firebase-realtime-database timestamp