0

在我的父Fragment的onCreateView方法中,我調用子片段管理器將一個片段插入佈局。這個子片段包含一些FloatingActionButtons。爲什麼這個片段的字段爲空?

在我提交事務後,我檢查底層列表的內容(爲RecyclerView提供動力),並根據是否存在任何值,隱藏/取消隱藏某些FloatingActionButton。

但它告訴我,按鈕是空的!提交Fragment事務是否不首先調用所有典型的生命週期事件?有沒有辦法迫使它等待?對此有更好的做法嗎?

+0

我相信你也可以在片段管理器上調用'executePendingTransactions()',片段的'onCreateView()'將作爲它的一部分被調用。不要說這是在[文檔](http://developer.android.com/reference/android/app/FragmentManager.html#executePendingTransactions())中警告的最好方式,但它可能是一個選項。 –

+0

@GeorgeMulligan它似乎並沒有爲我工作 –

+0

這真的很難過,它不應該很難做到這麼簡單在Android –

回答

0

提交不同步。無法保證片段的生命週期何時執行。

如果您需要知道片段何時「準備就緒」,請實現從片段到託管活動的回調,並讓它知道。

class CustomB extends CustomA { 
    interface Listener { 
    void onViewCreated(); 
    } 

    public View onCreateView() { 
    View v = super.onCreateView(); 

    if (getActivity() instanceof Listener) { 
     ((Listener)getActivity()).onViewCreated(); 
    } 

    return v; 
    } 
} 

一般來說,你應該嘗試設計你的片段是獨立的。如果片段與活動緊密相關,請考慮將該功能作爲自定義View來代替。

+0

包含FloatingActionButtons的片段用於應用程序中的幾個不同位置,這就是爲什麼我將它作爲片段。既然它在這種情況下被綁定到活動,我會擴展它呢? –

+0

如果您無法修改原始片段,那麼您可以輕鬆地添加通過擴展名編寫的上述功能。 –

相關問題