2016-07-15 29 views
2

我有一個ActivityAfragmentA一個fragmentA如何防止的onCreate/onCreateView方法的調用,如果該活動是整理

onAttach()方法,我需要哪些主機檢查一些條件,如果失敗了,我需要完成活動。 我正在通過致電getActivity().finish()完成活動。

即使我調用完成方法後,它仍然調用fragmentA中的onCreate(),onCreateView()onViewCreated()方法。

有什麼辦法可以阻止這些電話嗎?

+2

您可以在將片段添加到活動之前檢查這些條件嗎? – DeeV

+0

感謝您的建議DeeV。 (),onViewCreated(),onViewRestored()方法檢查所有的方法,然後我需要做isFinishing()檢查所有的方法,例如onCreate()方法檢查onAttach()方法 –

回答

1

作爲@DeeV評論,我會檢查條件之前附加Fragment。在這種情況下,您不必處理片段生命週期,這是一種更簡潔的方式。

如果這是不可能的,有一個hacky的方式。您可以撥打電話finish()onAttach(),然後使用活動的方法isFinishing()返回boolean標誌。我認爲這應該可以解決問題。

E.g.在您的片段的onCreate方法中:

if (getActivity().isFinishing()) { 
    // finish was called in onAttach 
} 
+0

謝謝你Gennadii ) 方法。 所以想知道是否有任何其他選項,而不是在這些方法中添加此檢查 –

+0

不,我不認爲這是可以避免的。它在android中的工作方式是它將諸如'onCreate()','onStart()'等消息添加到UI消息隊列中,這意味着它們將被處理,除非您明確將它們從隊列中刪除。當然,您不能將它們從隊列中移除,因爲您沒有'Runnable'或令牌來執行此操作。所以你要麼用'isFinishing()'方法調用這種黑客方式,或者嘗試避免附加片段本身。你確定你無法避免嗎?我認爲這應該是你的主要焦點,試圖避免片段附加事件。 –

+0

整個情況對我來說看起來是錯誤的:片段決定它是否應該在它附着時關閉活動。 'onAttach'應該僅用於附加目的,例如存儲活動引用,將其轉換爲片段將用於與活動交互的某個接口。所以我很確定問題出在你的用例本身,而不是片段回調。這就是爲什麼你基本上必須做這些黑客..片段不意味着這樣使用。 –

相關問題