首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >掌握LiveData StateHandling混沌

掌握LiveData StateHandling混沌
EN

Stack Overflow用户
提问于 2022-09-23 11:42:08
回答 1查看 32关注 0票数 0

我使用MapView根据当前用户位置或选定的地图位置显示一些标记。问题是当我使用导航组件和返回导航到另一个片段时。下面的一些步骤两次触发livedata值。

加载流程如下:

步骤1: MapView State -当地图准备就绪(GetMapAsync)时,继续执行步骤2。

步骤2:权限状态-检查位置权限和全球定位系统设置。如果未授予权限,则请求许可。如果授予了许可并且gps可用,Livedata将触发true,否则为false。

步骤3:位置更新状态-如果权限状态为真,则从fusedLocationProvider加载requestLocationUpdates和从服务器加载数据。如果为false,则在地图上设置预定义的位置,并从服务器加载此位置的数据。

问题:

一开始它运行得很好。第一步-第三步开火一次。当我导航到另一个片段并返回时,步骤1-3触发包含来自初始加载的数据的最后一个值。但是在第1步中,我总是检查是否允许再次返回true或false。这将导致步骤2和步骤3再次加载数据,从而导致再次从服务器加载数据。

我可以在onCreate中检查权限,但是步骤1 (MapView)必须在步骤2之前准备好。

是否知道如何防止再次从服务器加载数据。我已经为第一步尝试过SingleEvent (https://proandroiddev.com/singleliveevent-to-help-you-work-with-livedata-and-events-5ac519989c70)。这很好,但是我需要再次触发mapview状态来显示一些基于mapview状态的按钮。

注意:视图模型约束每个livedata对象,并且是一个activityViewModel。每个步骤都有自己的活动数据对象。

EN

回答 1

Stack Overflow用户

发布于 2022-09-25 10:40:01

我现在找到了一个解决办法:

位置LatLng是从服务器加载数据的关键。每次从位置提供程序到达新位置时,都会再次调用从服务器加载数据的方法。

解决方案是,只有在位置发生变化时才加载数据。这将防止再次从服务器加载数据,并将应用livedata的最后一个值。

这会导致初始负载出现问题。最初,当GPS不可用或不授予许可时,我存储的位置和位置提供者返回的位置是相同的。因此,有必要检查是否第一次调用了该片段。如果为真,则加载数据,即使位置相同。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73827156

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档