在我的父Fragment的onCreateView方法中,我調用子片段管理器將一個片段插入佈局。這個子片段包含一些FloatingActionButtons。爲什麼這個片段的字段爲空?
在我提交事務後,我檢查底層列表的內容(爲RecyclerView提供動力),並根據是否存在任何值,隱藏/取消隱藏某些FloatingActionButton。
但它告訴我,按鈕是空的!提交Fragment事務是否不首先調用所有典型的生命週期事件?有沒有辦法迫使它等待?對此有更好的做法嗎?
在我的父Fragment的onCreateView方法中,我調用子片段管理器將一個片段插入佈局。這個子片段包含一些FloatingActionButtons。爲什麼這個片段的字段爲空?
在我提交事務後,我檢查底層列表的內容(爲RecyclerView提供動力),並根據是否存在任何值,隱藏/取消隱藏某些FloatingActionButton。
但它告訴我,按鈕是空的!提交Fragment事務是否不首先調用所有典型的生命週期事件?有沒有辦法迫使它等待?對此有更好的做法嗎?
提交不同步。無法保證片段的生命週期何時執行。
如果您需要知道片段何時「準備就緒」,請實現從片段到託管活動的回調,並讓它知道。
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
來代替。
包含FloatingActionButtons的片段用於應用程序中的幾個不同位置,這就是爲什麼我將它作爲片段。既然它在這種情況下被綁定到活動,我會擴展它呢? –
如果您無法修改原始片段,那麼您可以輕鬆地添加通過擴展名編寫的上述功能。 –
我相信你也可以在片段管理器上調用'executePendingTransactions()',片段的'onCreateView()'將作爲它的一部分被調用。不要說這是在[文檔](http://developer.android.com/reference/android/app/FragmentManager.html#executePendingTransactions())中警告的最好方式,但它可能是一個選項。 –
@GeorgeMulligan它似乎並沒有爲我工作 –
這真的很難過,它不應該很難做到這麼簡單在Android –