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來解決這些問題。