我正在编辑问题以获得更明确的信息
在我的Activity A
中,我为某些条件启动了我的新Activity B
。
Activity A的OnCreate具有以下内容
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());
}
});
在Activity A
中,片段 Af
也被充气(inflated)。
FragmentManager fm = getSupportFragmentManager();
fragment = new FragmentOfActiityA();
fm.beginTransaction().replace(R.id.doc_fragment_container, fragment).commit();
在Fragment A中,我也有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);
这里全局声明了 reff
和 listener
。
当我销毁活动 A 时,我想要删除在 Activity A
和 Fragment Af
中的监听器。
我该怎么做?
如果我从其他Activity X
更改任何数据库值,则会自动触发Activity A
,因为这些值事件监听器。但我不想这样。
onPause()
中注册了监听器,那么需要在onResume()
中移除,这意味着当其他活动打开时,首先会调用onPause()
并注销你的valueEventListener
,因此在更改 Firebase 值后不会触发。如果你在onCreate()
中注册,则需要在onDestroy()
方法中移除。 - Dinesh