【发布时间】:2017-06-10 18:47:36
【问题描述】:
我有一个由一些 CardView 填充的 RecyclerView,其中包含一个图片、一些 TextView 和一个按钮(用作“喜欢”按钮)。我正在使用 Transaction 更新一些简单的计数器,但在喜欢/不喜欢之前,我必须检查 UserId 是否存在于我的数据库的节点中,例如:
Post_reference :
----userId_1_String: someValue
----userId_2_String: someValue
----userId_3_String: someValue
如果 userId 存在,我想删除它,然后用事务更新计数器(在不同的节点),否则我想添加它,然后更新计数器。 主要问题是我基本上只需要检查一次,然后我想删除监听器以避免内存泄漏,但我找不到让它工作的方法。我一直在使用 AddValueListenerForSingleValueEvent 但它更糟糕,因为你不能分离它
【问题讨论】:
-
您可以使用我在下面发布的截断方法来实现此目的。此外,您应该使用称为
toogleLike()或类似方法的方法实现一个接口,并将侦听器从您的Activity传递给您的RecyclerView。这样做您可以在每个RecyclerView项目中设置一个onClickListener及其当前位置。 -
这不是我问的,我也看不到在 sn-p 中删除了侦听器的位置。您的帖子基本上只是在参考中添加和删除一些值,我正在寻找的是检查是否存在类似的内容,然后进行交易,然后立即删除侦听器。此侦听器将附加在 recyclerView 中的每个元素上,如果用户喜欢(例如),100 个不同的帖子我需要删除 100 个不同的侦听器,我正在寻找一种方法来在 Like 方法完成后执行此操作是避免内存泄漏的工作
-
为什么要附加 100 个不同的侦听器?只需使用
onChildEventListener,它将通过单个侦听器通知您databaseReference 中每个新的、更改的、删除的或移动的子项:programcreek.com/java-api-examples/…
标签: android firebase firebase-realtime-database listener