【问题标题】:Remove multiple Firebase listeners created inside viewHolder删除在 viewHolder 中创建的多个 Firebase 侦听器
【发布时间】:2017-05-14 02:02:55
【问题描述】:

如何删除为每个视图项创建的多个侦听器?

            @Override
            protected void populateViewHolder(final MessageViewHolder viewHolder, final Friends msg, int position) {


                online = FirebaseDatabase.getInstance().getReference().child("online").child(msg.friend_id);
                    userListener = online.addValueEventListener(new ValueEventListener() {
                        @Override
                        public void onDataChange(DataSnapshot dataSnapshot) {
                            Online online = dataSnapshot.getValue(Online.class);
                            if(online != null){
                                if (viewHolder.getDiff(online.timestamp) < 1){
                                    viewHolder.donline.setVisibility(View.VISIBLE);
                                    System.out.println("Is online");
                                } else {
                                    viewHolder.donline.setVisibility(View.GONE);
                                }
                            }

                        }

                        @Override
                        public void onCancelled(DatabaseError databaseError) {

                        }

                    });


            }

        };

重新打开应用后,它将为 viewHolder 中的每个项目创建一个新的侦听器。如何在 onDestroy 中将它们全部删除?

【问题讨论】:

  • 试试这个:- online.removeEventListener(userListener)

标签: android firebase firebase-realtime-database listener


【解决方案1】:

要解除多个listeners,可以使用以下方法:

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);
    }
}

并且不要忘记根据您的活动生命周期使用此方法:

removeValueEventListener(hashMap);

【讨论】:

  • 它可能会起作用,但问题是在创建视图时,侦听器不会插入哈希图中。是否会自动将多个侦听器创建为 hashmap?
  • 是的,您需要将这些侦听器添加到 Map。是的,如果您使用上面的方法,使用Map,在onDestroy 中,所有侦听器都会自动停止。
  • 是的,我将每个侦听器都添加到了地图中,并且在 onStop 上我将它们全部删除,因为 onDestroy 并不总是会因为某种原因而触发,感谢您指出正确的方向
猜你喜欢
  • 2021-08-13
  • 1970-01-01
  • 2019-01-24
  • 2015-09-07
  • 2014-02-27
  • 1970-01-01
  • 1970-01-01
  • 2019-11-01
  • 1970-01-01
相关资源
最近更新 更多