因此,每当RealtimeDatabase发生更改时,ValueEventListener都会不断更改应用程序的数据。我想创建一个按钮来阻止ValueEventListener使用新数据不断更新应用程序。如何做到这一点?谢谢。
uyto3xhc1#
因此,每当RealtimeDatabase发生更改时,ValueEventListener都会不断更改应用程序的数据。是的,这是正确的。这就是实时监听器所做的。我想创建一个按钮来阻止ValueEventListener使用新数据不断更新应用程序。在相同的你已经添加了侦听器,你可以删除它。所以在代码中,它应该看起来像这样:
stopListenerButton.setOnClickListener { databaseReference.removeEventListener(valueEventListener); }
还有另一种方法,你实际上不需要删除监听器。如果需要,你可以使用Query#addListenerForSingleValueEvent(@NonNull ValueEventListener listener):为此位置的数据中的单个更改添加监听程序。此监听程序将使用该位置的数据值触发一次。
编辑:
以下是使用匿名对象创建侦听器的方法:
val listener = object : ValueEventListener { override fun onDataChange(snapshot: DataSnapshot) { TODO("Not yet implemented") } override fun onCancelled(error: DatabaseError) { TODO("Not yet implemented") //Never ignore potential errors! } }
以下是附加侦听器的方式:
yourRef.addValueEventListener(listener)
下面是删除侦听器的方法:
yourRef.removeEventListener(listener)
1条答案
按热度按时间uyto3xhc1#
因此,每当RealtimeDatabase发生更改时,ValueEventListener都会不断更改应用程序的数据。
是的,这是正确的。这就是实时监听器所做的。
我想创建一个按钮来阻止ValueEventListener使用新数据不断更新应用程序。
在相同的你已经添加了侦听器,你可以删除它。所以在代码中,它应该看起来像这样:
还有另一种方法,你实际上不需要删除监听器。如果需要,你可以使用Query#addListenerForSingleValueEvent(@NonNull ValueEventListener listener):
为此位置的数据中的单个更改添加监听程序。此监听程序将使用该位置的数据值触发一次。
编辑:
以下是使用匿名对象创建侦听器的方法:
以下是附加侦听器的方式:
下面是删除侦听器的方法: