【问题标题】:Dealing with lengthy loading of data in a Spinner在 Spinner 中处理冗长的数据加载
【发布时间】:2019-05-08 14:40:21
【问题描述】:

我在 Android 中有两个 Spinner。用户从第一个中选择,然后根据第一个中的选择填充第二个 Spinner 的适配器。数据必须来自 REST 服务器(速度不是很快),因此第二个 Spinner 需要很长时间才能加载。

从 UI 的角度来看,最好的方法是什么?我可以做几件事,例如:显示 Spinner 所在的加载圈,或禁用第二个 Spinner,直到加载新数据。

这些似乎不是非常理想的解决方案,我很想知道是否有更好的方法来做到这一点。

请注意,在页面显示之前缓存第一个 Spinner 的所有可能选择的所有可能值并不是一个真正的选择,因为这需要多次调用服务器并且每次调用需要几秒钟。我无法控制所提供的服务器或端点。

【问题讨论】:

  • 如果这没有被标记下来(并且没有评论为什么)会很有帮助 - 这是一个合法的问题,据我所知,在 SO 的任何地方都没有得到回答。

标签: android rest server spinner adapter


【解决方案1】:

我会推荐骨架样式加载。 仅显示可以使用的真实控件。因此,如果第一个微调器强制 API 调用。我会使用“可取消的协程作业”,这样如果他们再次选择,它就可以被取消。

然后创建第二个下拉动画的骨架闪烁,直到它准备好。忙碌的指示圈已经播出,人们讨厌看到它们。

但是,如果您确定要制作忙碌指示器圆圈,那么我会亲自在微调器控件上覆盖一个小的忙碌指示器,并使微调器控件在准备好之前无法聚焦。

此外,如果您实现了存储库和 MVVM 模式,您可以在获取符合您的模型的更新数据时交回缓存数据。

https://uxdesign.cc/what-you-should-know-about-skeleton-screens-a820c45a571a

【讨论】:

  • 在加载数据时听起来像是第二个微调器的骨架或占位符可能是前进的方向。
【解决方案2】:

实际上你能做的并不多。如果 REST 调用需要时间,那么,这需要时间,除了获得更好的 Internet 连接之外,您无能为力。

我想到的唯一一件事就是在应用程序加载时在第二个 Spinner 中选择所有可能的选择,并将其本地存储在数据库中。这样,可能只在第一次使用时加载应用程序需要时间,但下一次执行会更快,因为您不需要重新下载数据。

或者,简单地说,只是显示一个加载圈。如果 REST 服务程序很慢,那不是你的错……

【讨论】:

  • 是的,我希望有一个标准的方法来解决这个问题——我所拥有的应用程序都没有显示这种情况的示例。我想要一种方法来避免让用户在加载新数据之前从第二个微调器中进行选择。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-26
  • 2011-07-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-24
  • 1970-01-01
相关资源
最近更新 更多