2017-09-27 66 views
0

我的應用程序中的每個片段都有自己的一組連續的Firebase偵聽器。一旦活動片段發生變化,這些就變得不必要了,然而,聽衆仍然在後臺。除此之外,這些老的監聽器可能會觸發前一個Fragment的View更新,這會導致應用程序崩潰。所以,我希望在碎片發生變化時整理並清理聽衆。我不知道如何,但我有一個替代解決方案,我很好奇你的想法和建議。刪除片段上連續的Firebase偵聽器更改

監聽器函數被調用的片段onCreate,例如:

fuSetListener(); 

這些功能檢索和保存在全局變量中的數據。

在火力地堡聽者的onDataChange我執行此if語句來檢查偵聽器應該被刪除:

if(getActivity()==null){ 
    reference.removeEventListener(this); 
} else { 
    // Perform necessary onDataChange actions 
} 

於是問題出現了,並getActivity()只有在情況下返回null的碎片有什麼改變?或者可能getActivity()返回null沒有改變片段和弄亂我的片段的目的?

我已經應用了這種方法幾次,並沒有遇到麻煩,但我想在繼續之前與您覈對。

回答

0

您需要根據片段的life-cycle刪除監聽器。

如果您已在onStart中添加聽衆,則必須將其移除在onStop中。 如果您已將收聽者添加到onResume中,則必須將其從中刪除。 如果您已在onCreate中添加聽衆,則必須將其從onDestroy中刪除。 但記住onDestroy並不總是被稱爲。

希望它有幫助。