我有一个带谷歌地图的活动,还有一个片段,里面有地址(开始/停止)字段。
当LocationManager
第一次返回用户的位置时,我尝试更新地址片段中的起始字段。
但有时我得到例外:
java.lang.IllegalStateException: Fragment CoordinatesFragment not attached to Activity
我不明白为什么。
我知道有方法Fragment.isAdded()
,我可以使用,但似乎不是解决问题的最佳方法。
有时我尝试恢复状态时会遇到此异常(在onRestoreInstanceState(Bundle state)
我获取数据并在onMapLoaded()
尝试使用)
答案 0 :(得分:0)
检查一下; http://developer.android.com/reference/android/app/Fragment.html#isAdded()
if(!isAdded()) {
return;
}
答案 1 :(得分:0)
private void setFragment(Fragment fragmentToSet, String tag) {
FragmentManager manager = getSupportFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
Fragment fragment = manager.findFragmentByTag(tag);
if (savedInstanceState == null) {
if (fragment != null && !fragment.isAdded()) {
transaction.replace(R.id.home_container, fragment, tag);
} else if (fragmentToSet != null && !fragmentToSet.isAdded()) {
transaction.replace(R.id.home_container, fragmentToSet, tag);
}
}else{
transaction.replace(R.id.home_container, fragment, tag);
}
transaction.commitAllowingStateLoss();
manager.executePendingTransactions();
}
尝试使用此功能在活动中设置片段。它对我有益。您可以保存活动的onCreate
中的savedInstanceState答案 2 :(得分:0)
如果你可以使用RxJava 2,你可以在Observable缓存中获得LocationManager的结果,Fragment可以订阅结果。
如果结果已到达且片段尚未附加,片段将在附加时收到结果。否则它会立即收到。
我建议您了解RxJava如何用于解决此类问题。