android - Firebase 中的控制按钮可见性
问题描述
这是我的代码
@Override
protected void onStart() {
super.onStart();
control.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
s2=dataSnapshot.getValue(String.class);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
if (s1==s2){
button.setVisibility(View.INVISIBLE);
}
}
}
当试图从 Firebase 控制可见性时,上面的代码不起作用。如果我在不使用 Firebase 的情况下尝试相同的方法,它会起作用。将不胜感激任何建议
解决方案
实际上 addValueEventListener() 是一个ASYNC
调用,因此在s2
分配值之前,它会在您的if(s1==s2)
语句中进行比较,并且比较时的值s2
是默认值或 null。
相反,您可以尝试将按钮隐藏在异步调用本身中
@Override
protected void onStart() {
super.onStart();
control.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
s2=dataSnapshot.getValue(String.class);
if ( s1.equalsIgnoreCase(s2) )
button.setVisibility(View.INVISIBLE);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {}
});
//if (s1==s2) //Remove these lines
//button.setVisibility(View.INVISIBLE);
}
推荐阅读
- python - GNU 屏幕:连接已关闭
- java - 使用 JavaFX 和场景构建器创建特定的用户界面设计
- javascript - 在代码中将多个 tiff 合并为多页 tiff 的包或任何其他方式
- java - 如果应用程序包含 @KafkaListener 注释,则 SpringBootTest 失败
- spring - 登录后如何为当前用户添加新角色
- bash - 在后台从 Bash 脚本启动进程,然后将其带到前台
- javascript - 如何使网格中的每个框都响应 on('click')?
- javascript - 当在 Menu 组件中定义 Route 时,组件不会被渲染
- sql - 在 Postgres 中将时间戳转换为 unix_timestamp
- javascript - 用于 Jest 测试的模拟文档