繁体   English   中英

片段未附加到“活动”,最佳解决方案?

[英]Fragment not attached to Activity, best solution?

我有一个带有google map的Activity和一个带有地址(开始/停止)字段的片段。

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

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

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

也有时在尝试还原状态时出现此异常(在onRestoreInstanceState(Bundle state)我获取数据,在onMapLoaded()尝试使用)

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

如果可以使用RxJava 2,则可以将LocationManager的结果缓存在Observable中,并且Fragment可以预订结果。

如果结果已到达且尚未附加片段,则片段将在附加后接收结果。 否则它将立即收到。

我建议您学习如何使用RxJava解决此类问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM