删除在viewHolder中创建的多个Firebase侦听器

问题描述 投票:0回答:1

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

            @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内部取消所有内容?

android firebase firebase-realtime-database listener
1个回答
0
投票

要分离多个qazxsw opi,您可以使用以下方法:

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);
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.