android - 在 Spinner 中处理冗长的数据加载
问题描述
我在 Android 中有两个 Spinner。用户从第一个中进行选择,然后根据第一个中的选择填充第二个 Spinner 的适配器。数据必须来自 REST 服务器(速度不是很快),因此第二个 Spinner 需要很长时间才能加载。
从 UI 的角度来看,最好的方法是什么?我可以做几件事,例如:显示 Spinner 所在的加载圈,或禁用第二个 Spinner,直到加载新数据。
这些似乎不是非常理想的解决方案,我很想知道是否有更好的方法来做到这一点。
请注意,在页面显示之前缓存第一个 Spinner 的所有可能选择的所有可能值并不是一个真正的选项,因为这需要多次调用服务器并且每次调用需要几秒钟。我无法控制所提供的服务器或端点。
解决方案
我会推荐骨架样式加载。仅显示可以使用的真实控件。因此,如果第一个微调器强制 API 调用。我会使用“可取消的协程作业”,这样如果他们再次选择,它就可以被取消。
然后创建第二个下拉动画的骨架闪烁,直到它准备好。忙碌的指标圈已经播出,人们讨厌看到它们。
但是,如果您确定要制作繁忙指示器圆圈,那么我会亲自在微调器控件上覆盖一个小的忙碌指示器,并使微调器控件在准备好之前无法聚焦。
此外,如果您实现了存储库和 MVVM 模式,您可以在获取更新的数据时交回缓存数据(如果这适合您的模型)。
https://uxdesign.cc/what-you-should-know-about-skeleton-screens-a820c45a571a
推荐阅读
- python - 从头开始使用 Python 数据构建表
- windows - 服务器待重启
- c++ - Opencv 的 cv::Mat::forEach<> 函数的 position 参数对应什么索引顺序?
- ruby-on-rails - 在 Rails 6 中软删除活动文本
- javascript - Bootstrap 4 崩溃不适用于 ReactJS 中的地图
- python - 使用python从Linux上的特定内存地址读取值
- flutter - 解析 Json 数组和对象 Flutter
- java - 在 Spring JPA 中使用 SortedSet
- blockchain - 谁应该在区块链上部署智能合约?
- tsql - ElasticSearch 中的多字段通配符搜索