我真的很好奇如何確定(來自外部類)如果片段的onCreateView()
已被調用。我搜索了類似的問題,但沒有發現。我如何知道onCreateView已被外部類調用?
比如說,是fragment.isAdded()
的一個很好的指標?
我的第一個想法是簡單地fragment.getView() != null
,但我並不是100%確定它看起來是可靠的,而且我也略微不願意使用它(無特殊原因,我只是傾向於避免無效檢查)。我很樂意找到解決方法。我建議有:
isAdded()
返回真,如果片段正在增加其活性。
這條線在我看來很模糊; 增加了不是附加,但都沒有創建。它可能涉及到FragmentTransaction.add()
(這在語義上是錯誤的,因爲您可以讓<fragment>
停留在佈局中,而無需致電add
或replace
)。
仍然,FragmentTransaction.add()
documentation沒有信息也沒有讓你覺得added -> created
。我會說不。
ISVISIBLE()
返回真,如果片段是當前對用戶可見。這意味着:(1)已被添加,(2)將其視圖附加到窗口,並且(3)不被隱藏。
看起來不錯,從這個意義上說,isVisible() -> isCreated
,但第三個選項使它isCreated != isVisible
。我只是想到視圖尋呼機中的片段:並非所有片段都可見,但是當前可見片段附近的片段被添加,創建並存活,您可以調用它們的方法。但對於他們來說,isVisible() == false
。這太嚴格了。
isInLayout()
返回如果爲真佈局被包括作爲經由<片段>標記的活動視圖 層次結構的一部分。在通過< fragment>標記創建 片段時,除非 (其中舊片段從先前狀態恢復並且 不出現在當前狀態的佈局中)除外。
我不認爲這適用於此。
getView()!= NULL
返回 片段的根視圖,或者null若沒有佈局。
這看起來仍然是唯一的解決方案。我只是想確認一下。
實現回調
..to被稱爲onCreateView()
,或者更好,onViewCreated()
。但是:
- 我不需要在創建片段後立即調用某些內容(爲什麼需要這樣做?),我需要在給定時間檢查某些內容;
- 應該定義相反的,比如onViewNotAvailableAnymore(),使檢查在任何時候都有意義;
- 我不明白這與
getView != null
會有什麼不同或更好。
也許這將幫助你: http://stackoverflow.com/questions/9294603/get-currently-displayed-fragment – q21forfun
設置的界面和使用一個活動,您可以在其中添加片段以查看片段的onCreateView是否被調用。 –