[英]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()
尝试使用)
检查一下; http://developer.android.com/reference/android/app/Fragment.html#iwego()
if(!isAdded()) {
return;
}
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.