簡體   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