【发布时间】:2019-01-21 14:02:09
【问题描述】:
我制作了一个简单的烹饪应用程序,用户可以在其中选择多个项目并获取包含所选成分的食谱列表。有两种选择成分的模式:标签和复选框。在第二种模式中,您可以输入您想要的成分数量并点击“随机化”按钮或只需按“选择/取消选择所有成分”按钮。问题始于超过 300 个(具体为 386 个)的复选框数量。代码运行正常,但GUI冻结时间过长。
所以,我得到了HashMap <String/CheckBox> checkBoxHashMap,其中键是复选框的标记。要全选(与取消全选相同,但使用 false 值)我使用的是以下代码:
for (CheckBox chkBox: checkBoxHashMap.values()) {
chkBox.setChecked(true);
}
我尝试使用的内容:
1) 使用ProgressBar。问题是,ProgressBar 的动画在所有CheckBoxes 的选择/取消选择期间被冻结。另外,大多数时候ProgressBar 甚至都没有出现(在选择了所有CheckBoxes 之后,我隐藏了ProgressBar;
2) 在调用chkBox.setChecked(true); 后立即使用chkBox.jumpDrawablesToCurrentState();,这是我能获得的最好的性能,但它仍然滞后并且不满意。
我想要什么:
我想让它更加用户友好(我相信,冻结的 GUI 根本不是用户友好的)。我想实现软切换所有复选框(链状动画)或其他东西,如禁用动画并在所有CheckBoxes 改变它们的状态并将它们重新绘制在一起之后重新启用它。
有没有办法实现这样的目标?
【问题讨论】:
标签: java android performance checkbox