我一直在使用firebase,我發現了一些奇怪的東西。 即使在我完成活動後,我在活動中註冊的價值事件偵聽器之一也會被觸發。 我已添加代碼以在'onDataChanged'方法中打開新活動,因此即使我處於不同活動中,也會打開新活動。這在應用程序中造成了很大的問題。 我知道我必須調用刪除監聽器,但我期望監聽器在活動完成後自動移除。有一種更簡單的方法,我可以刪除活動的所有值事件偵聽器嗎?提前致謝。即使在活動完成後,Firebase值事件偵聽器也會觸發嗎?
1
A
回答
3
您需要在離開主要活動後刪除監聽器。爲了做到這一點,你可以創建一個方法是這樣的:根據不僅僅是打電話removeValueEventListener(hashMap);
hashMap.put(yourRef, eventListener);
:
private HashMap<DatabaseReference, ValueEventListener> hashMap = new HashMap<>();
public static void removeValueEventListener(HashMap<DatabaseReference, ValueEventListener> hashMap) {
for (Map.Entry<DatabaseReference, ValueEventListener> entry : hashMap.entrySet()) {
DatabaseReference databaseReference = entry.getKey();
ValueEventListener valueEventListener = entry.getValue();
databaseReference.removeEventListener(valueEventListener);
}
}
要刪除一個利斯特每一次,你可以使用此行代碼到活動的生命週期。您可以在您的onPause()
或onStop()
方法中添加此行。通過這種方式您可以立即刪除所有聽衆。
希望它有幫助。
+2
嘿謝謝你的回答,但我已經知道了。我想知道是否有其他方法可以同時刪除所有聽衆?因爲手動做這件事需要很長時間。 –
+0
是的,其實有。請看我更新的答案。 –
相關問題
- 1. 在設置偵聽器之前會觸發事件嗎?
- 2. 使「scrollLeft」/「scrollTop」更改不會觸發滾動事件偵聽器
- 3. 事件偵聽器在觸發事件後執行
- 4. jQuery委託不同DOM層次結構的事件偵聽器 - 適用的事件偵聽器會觸發嗎?
- 5. dispatchEvent不觸發jQuery.on()事件偵聽器
- 6. 即使值沒有變化,Hazelcast也會觸發聽衆更新事件
- 7. 在動作偵聽器偵聽事件後,Java gui不打印
- 8. 即使對象構建失敗也會調用本地事件偵聽器
- 9. 確保在擴展活動後調用事件偵聽器
- 10. NServiceBus在啓動時不觸發事件偵聽器
- 11. 組合框上的事件偵聽器不會觸發EXTJS 4
- 12. 通過sencha構建偵聽器事件不會觸發
- 13. Flash AS3:(VideoEvent.COMPLETE,completePlay) - 在視頻完成之前觸發偵聽器
- 14. jQuery - 如何在事件觸發後暫時禁用onclick事件偵聽器?
- 15. Javascript事件偵聽器在發射後會被破壞(默認情況下)嗎?
- 16. 偵聽文檔單擊事件的指令在創建後立即被觸發
- 17. pageshow事件偵聽不觸發
- 18. 如何阻止兒童傳播活動/委託偵聽器觸發的事件?
- 19. 即使外部鍵盤存在,UIKeyboardDidShowNotification事件也會觸發
- 20. 如何阻止此事件偵聽器自動觸發
- 21. 即使我完成活動,mediaPlayer也不會停止
- 22. JS - 事件偵聽器被觸發事件
- 23. 如何在Firebase值事件上設置偵聽器?
- 24. 在選擇器應用之前觸發jQuery事件偵聽器?
- 25. Propertychanged事件即使在屬性值未更改時也觸發
- 26. Firebase DatabaseReference未刪除事件偵聽器嗎?
- 27. 暫停事件偵聽器在後臺
- 28. 刪除node.js事件,偵聽器也消失了嗎?
- 29. 事件偵聽器
- 30. 刪除元素是否也會刪除其事件偵聽器?
Firebase數據庫偵聽器沒有上下文綁定。您需要在正確的活動生命週期事件中的代碼中明確地將其刪除,如Alex的答案中所述。 –
有沒有辦法將它附加到上下文中?我不想手動去做,因爲每個活動都有很多聽衆。 –
請參閱我更新的答案。 –