java - 通过打开/关闭 300 多个复选框来改善用户体验

标签 java android performance checkbox

我制作了一个简单的 cooking 应用程序,用户可以在其中选择多个项目并获取包含所选成分的食谱列表。有两种选择成分的模式:通过标签和通过复选框。在第二种模式下,您可以输入所需的成分数量,然后点击“随机化”按钮或只需按“选择/取消选择所有成分”按钮。问题始于超过 300 个复选框(具体来说是 386 个)。代码运行良好,但 GUI 保持卡住的时间过长。

所以,我有 HashMap <String/CheckBox> checkBoxHashMap ,其中 key 是复选框的标签。要全选(与取消全选相同,但具有 false 值)我正在使用此代码:

for (CheckBox chkBox: checkBoxHashMap.values()) {
        chkBox.setChecked(true);
    }

我尝试使用的是: 1)使用ProgressBar .问题是,ProgressBar 的动画在选择/取消选择所有 CheckBox 期间被卡住es。另外,大多数时候ProgressBar甚至没有出现(在所有 ProgressBar es 被选中后,我隐藏了 CheckBox; 2) 使用chkBox.jumpDrawablesToCurrentState();打电话后立即 chkBox.setChecked(true);这是我能获得的最好的性能,但它仍然落后并且不能让我满意。

我想要的: 我想让它对用户更友好(我相信卡住的 GUI 根本不是用户友好的)。我想实现软切换开/关所有复选框(类似链的动画)或其他类似禁用动画并在所有 CheckBox 之后启用它的功能。 es 已经改变了它们的状态并重新绘制它们。

有没有办法实现这样的目标?

最佳答案

老实说,如果我是你,我会使用 RecyclerView 来处理这种情况。

同时在屏幕上显示 300 个项目从来都不是一个好主意:用户不可能一次需要所有的项目,系统也不应该处理这种负载。

这个概念是回收 View ,这意味着一旦 View 变得不可见,它所需的资源就会被释放,并且可以重新用于另一个数据单元。

我做了介绍article关于 RecyclerView 有很多例子,看看

在您的特定情况下,只需为复选框制作适当的数据集并异步更改它,在 UI 线程上使用此操作的结果只是为了更新 RCV(与您现在拥有的操作相比,这是一个非常轻量级的操作)

关于java - 通过打开/关闭 300 多个复选框来改善用户体验,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51846063/

相关文章:

java - 如何构建模仿 topcoder、codingbat 等的软件?

具有固定日期和重复性的 Android 闹钟管理器

java.net.ProtocolException : unexpected end of stream happened when i uploaded a image to server by okhttp

java - 如何在 Java 中以 O(1) 时间查找数组中的重复项?

python - 高效读取文件中的某一行

Java程序随机结束,没有给出错误

java - Selenium Web 驱动程序单击图像

java - 流状态计算 : cumulative sums

android - 位图大小超出 VM 预算

javascript - 为什么 JavaScript 在 FireFox 附加组件中比在 FireFox 加载的网页中慢?