一旦boolean[3]
中的所有元素都为真,我想隐藏进展栏
。为此,我使用MutableLiveData
。现在进展栏
立即消失,似乎无需等待所有true。这是我的代码。
左抽屉指针:
if (drawerItemList.get(pos).getTitle().equals(activity.getResources().getString(R.string.statistics_drawer))) {
Dialog dialog = new MyDialog(activity, R.layout.statistics);
ProgressBar progressBar = dialog.findViewById(R.id.bigProgressBar);
MutableLiveData<boolean[]> listen = new MutableLiveData<>();
listen.setValue(new boolean[]{false, false, false});
restModel.getAllUsers(listen.getValue(), dialog.findViewById(R.id.usersRegisteredValue));
restModel.getUsersOnline(listen.getValue(), dialog.findViewById(R.id.usersOnlineValue));
restModel.getMaxNumberOfUsersOnline(listen.getValue(), dialog.findViewById(R.id.maxNumberOnlineValue));
listen.observe((LifecycleOwner)activity, new Observer<boolean[]>() {
@Override
public void onChanged(boolean[] booleans) {
if (Stream.of(booleans).allMatch(val -> true))
progressBar.setVisibility(View.GONE);
}
});
dialog.show();
}
RestModel:
public void getAllUsers(final boolean isThreeStatisticsCallSucceeded[], TextView textView) {
Call<String> result = Api.getClient1Or2().getAllUsers();
result.enqueue(new Callback<String>() {
@Override
public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
if(response.body() != null) {
textView.setText(response.body());
isThreeStatisticsCallSucceeded[0] = true;
}
}
@Override
public void onFailure(@NonNull Call<String> call, @NonNull Throwable t) {
Log.e("getAllUsers failure", t.toString());
call.clone().enqueue(this);
}
});
}
public void getUsersOnline(boolean isThreeStatisticsCallSucceeded[], TextView textView) {
Call<String> result = Api.getClient1Or2().getUsersOnline();
result.enqueue(new Callback<String>() {
@Override
public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
if (response.body() != null) {
textView.setText(response.body());
isThreeStatisticsCallSucceeded[1] = true;
}
}
@Override
public void onFailure(@NonNull Call<String> call, @NonNull Throwable t) {
Log.e("getUsersOnline failure", t.toString());
call.clone().enqueue(this);
}
});
}
public void getMaxNumberOfUsersOnline(boolean isThreeStatisticsCallSucceeded[], TextView textView) {
Call<String> result = Api.getClient1Or2().getMaxUsersOnline();
result.enqueue(new Callback<String>() {
@Override
public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
if (response.body() != null) {
textView.setText(response.body());
isThreeStatisticsCallSucceeded[2] = true;
}
}
@Override
public void onFailure(@NonNull Call<String> call, @NonNull Throwable t) {
Log.e("getMaxNumberOfUsersOnli", t.toString());
call.clone().enqueue(this);
}
});
}
怎么解决?
这里有两个问题。首先,您无法轻松地将布尔[]转换为流
其他直接方法也不起作用:rrays.stream(布尔值)会给你一个编译器错误,rrays.as列表(布尔值)也会给你一个流
您可以从这个答案中遵循以下方法。您基本上将IntStream
转换为Stream
流
第二个问题是如何检查所有元素是否为
true
。目前您有... allMatch(val-
最后,您的方法应该如下所示:
@Override
public void onChanged(boolean[] booleans) {
Stream<Boolean> stream = IntStream.range(0, booleans.length).mapToObj(idx -> booleans[idx]);
if (stream.allMatch(val -> val))
progressBar.setVisibility(View.GONE);
}
问题内容: 我有一个按钮,并添加了一些按钮: 我可以通过以下方式删除它们: 如果我想一次删除所有侦听器,或者没有函数引用()怎么办?有没有办法做到这一点,或者我必须一个一个地删除它们? 问题答案: 我认为最快的方法是克隆节点,这将删除所有事件侦听器: 请注意,因为这也会清除所涉及节点的所有子元素上的事件侦听器,因此,如果要保留该侦听器,则必须一次显式删除一个侦听器。
检查给定的参数是否是一个原生的布尔值。 使用 typeof 来检查一个值是否为一个布尔值。 const isBoolean = val => typeof val === 'boolean'; isBoolean(null); // false isBoolean(false); // true
背景:问题是什么 我的应用程序有一个单词的首字母缩略词让我们假设它是 字母表 当我使用谷歌的语音服务时,它会读出字母,这很棒。 然而,当我使用三星语音(S Voice)时,它读出的是一个词,这不是很好! 那么为什么不只是设置内容描述呢? ABC出现在许多地方,设置替代内容描述是不可行的。此外,它还可以破解其他语音服务的内容描述,如谷歌的内容描述 我的计划 所以我不久前遇到了一个问题,我发现了这个扩
问题内容: 本质上,我希望更改内容时执行脚本。由于脚本是分开的(Chrome扩展程序和网页脚本中的内容脚本),因此我需要一种方法来简单地观察DOM状态的变化。我可以设置轮询,但这似乎草率。 问题答案: 长期以来,DOM3突变事件是最佳的可用解决方案,但由于性能原因,不建议使用它们。DOM4突变观察者代替了不推荐使用的DOM3突变事件。目前,它们在现代浏览器中的实现方式为(或在旧版Chrome中由供
问题内容: 由于所有元素均为“ false”,如何返回“ false”? 给定的列表是: 问题答案: 使用: 如果可迭代项中有任何真值,则将返回True。
问题内容: 我有两个Activity类。和。稍后,我添加了当用户摇动设备在或时启动的功能。现在,如果我在和中注册了ShakeListener ,就可以实现我的目标 但是,我现在想要的是另一回事,我不想更改和。我想编写一个不同的类,该类在整个应用程序中运行,并为该应用程序中的所有活动注册ShakeListener。我怎样才能做到这一点?那应该是什么样的课? 我尝试了扩展BroadcastReceiv