0

我有一个活动谷歌地图,和一个片段,其中的地址(开始/停止)领域。片段不附加到活动,最好的解决方案?

LocationManager第一次返回用户的位置时,我尝试更新地址片段中的开始字段。

但有时我得到异常: java.lang.IllegalStateException: Fragment CoordinatesFragment not attached to Activity

而且我不明白为什么。 我知道有方法Fragment.isAdded(),我可以使用,但它似乎不是解决问题的最佳方法。

有时也被我得到这个异常,当试图恢复状态(onRestoreInstanceState(Bundle state)我得到的数据和onMapLoaded()尝试使用)

回答

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(); 
} 

尝试使用此功能来设置你的活动片段。它的工作对我很好。你可以从你的activity的onCreate中保存savedInstanceState

0

如果你可以使用RxJava 2,你可以在一个Observable中缓存LocationManager的结果,并且Fragment可以订阅结果。

如果结果已经到达并且尚未附加片段,片段将在附加结果时收到结果。否则它会立即收到它。

我向你推荐学习如何使用RxJava来解决这些问题。