我有一个带有谷歌Map的Activity和一个片段,其中包含地址(开始/停止)字段。
当LocationManager
第一次返回用户的位置时,我尝试更新地址片段中的起始字段。
但有时我会遇到例外:java.lang.IllegalStateException: Fragment CoordinatesFragment not attached to Activity
我不明白为什么。我知道有方法Fragment.isAdded()
,我可以使用,但它似乎不是解决问题的最佳方法。
此外,有时我会在尝试恢复状态时遇到此异常(在onRestoreInstanceState(Bundle state)
中,我获取数据,而在onMapLoaded()
中,尝试使用)
4条答案
按热度按时间qfe3c7zg1#
如果可以使用RxJava2,就可以在Observable中缓存LocationManager的结果,而Fragment可以订阅该结果。
如果结果已经到达,而片段还没有被附加,那么片段将在它被附加时收到结果,否则它将立即收到结果。
我建议您学习如何使用RxJava来解决此类问题。
f4t66c6m2#
请检查此内容;
f3temu5u3#
尝试使用此函数设置Activity中的片段。它对我来说很好用。您可以保存Activity的onCreate中的savedInstanceState
dbf7pr2w4#
虽然使用
isAdded()
是最简单的解决方案,但我遇到了使用这种方法不是最佳选择的情况。首先,我创建了一个
FragmentActivity
类型的全局变量。然后,在
onViewCreated()
方法中,我将其值初始化为:fragmentActivity = requiredActivity();
之后,在
onAttach()
方法中,我将参数中的上下文强制转换为FragmentActivity,并以以下方式将其赋值给该全局变量:通过这种方式,我可以使用
fragmentActivity
来避免IllegalStateException,而不是使用requireActivity()
或requireContext()
。