片段没有附加到Activity,最佳解决方案?

时间:2016-08-11 21:17:47

标签: java android android-fragments google-maps-android-api-2

我有一个带谷歌地图的活动,还有一个片段,里面有地址(开始/停止)字段。

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

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

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

有时我尝试恢复状态时会遇到此异常(在onRestoreInstanceState(Bundle state)我获取数据并在onMapLoaded()尝试使用)

3 个答案:

答案 0 :(得分:0)

答案 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如何用于解决此类问题。