[英]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.