Reputation: 801
I'm editing the question for more clarity
In my Activity A
, I have have started my new Activity B
for certain condition.
OnCreate of Activity A has the following
final DatabaseReference reff = FirebaseDatabase.getInstance().getReference("Example").child(userid);
reff.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()) {`
navHeaderName.setText(Objects.requireNonNull(dataSnapshot.child("name").getValue()).toString());
navHeaderId.setText(Objects.requireNonNull(dataSnapshot.child("member_ID").getValue()).toString());
} else
reff.removeEventListener(this);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Log.d("RF-NavSet", databaseError.toString());
}
});
`
In the fragment Af
is also si inflated in Activity A
FragmentManager fm = getSupportFragmentManager();
fragment = new FragmentOfActiityA();
fm.beginTransaction().replace(R.id.doc_fragment_container, fragment).commit();
In Fragment A also I have Firebase ValueEventListener
listener = new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
TextView text1 = view.findViewById(R.id.some_text1);
TextView text2 = view.findViewById(R.id.some_text2);
TextView text3 = view.findViewById(R.id.some_text3);
text1.setText(Objects.requireNonNull(dataSnapshot.child(userId).child("name").getValue()).toString());
text2.setText(Objects.requireNonNull(dataSnapshot.child(userId).child("specialisation").getValue()).toString());
text3.setText(Objects.requireNonNull(dataSnapshot.child(userId).child("member_ID").getValue()).toString());
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Log.d("RF - SetProfile", databaseError.getMessage());
}
};
reff.addListenerForSingleValueEvent(listener);
Here reff
and listener
are globally declared.
When I destroy Activity A, I want to remove listener in Activity A
and Fragment Af
.
How can I do that?
If I change any database value from some other Activity X
, Activity A
is automatically triggered due to these ValueEventListener which I dont want.
Upvotes: 3
Views: 735
Reputation: 801
I have got the answer for the problem.
There one previous Activity O
which I missed to removeEventListener which was secretly launching Activity A
.
Took a while to understand that
Upvotes: 1
Reputation: 1670
Remove the listener in your onDestroy()
of activity A
mDatabaseRef.child(key).removeListener(mListener);
And your activity A
in background when open activity B
and if you want to remove listener then remove listener in onPause()
and add listener in onResume()
Upvotes: 4