如何解决从另一个片段中关闭一个片段并进行Firebase身份验证
我正在尝试使用以下代码在Firebase注销事件之后关闭三个不同的片段。
问题是当我尝试在此注销事件之后注册新帐户时,选项卡布局活动中某个片段的侦听器不会关闭,并且其中一个数据库侦听器一直处于激活状态。为了澄清,我将三个片段从属于一个活动。这些片段之一包含一个注销按钮。当我单击注销时,我想关闭该片段以及其他两个片段以及它们所在的活动,但是不知何故,其中一个片段保持打开状态,并且从其中一个片段中激活了addChildEventListener。
按钮
logOut.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
FirebaseAuth.getInstance().signOut();
FragmentManager fm = getFragmentManager();
fm.popBackStack(null,FragmentManager.POP_BACK_STACK_INCLUSIVE);
int count = fm.getBackStackEntryCount();
LOG_ENTRY("THE FRAGMENT COUNT IS: " + String.valueOf(count));
for(int i = 0; i < count; ++i) {
fm.popBackStack();
LOG_ENTRY("BACK STACK POP!");
}
getActivity().finish();
LOG_ENTRY("ACTIVITY FINISHED");
Intent intent = new Intent(getActivity(),LoginAndRegistration.class);
startActivity(intent);
}
});
我尝试过的方法:最初,我只是使用注销按钮在片段中调用了getActivity()。finish(),但这并没有解决问题,所以我想也许片段由于其他原因未关闭,因此我输入了POP_BACKSTACK代码,但这也没有解决问题。我不确定我在这里缺少什么。请告知。
标签活动:
public class TabActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_tab);
TabLayout tabLayout = findViewById(R.id.tabLayout);
final ViewPager2 viewPager2 = findViewById(R.id.viewPager2);
viewPager2.setAdapter(new ScreenSlidePagerAdapter(this));
tabLayout.setScrollPosition(1,0f,true);
viewPager2.setCurrentItem(1,false);
viewPager2.setUserInputEnabled(false);
final TabLayoutMediator tabLayoutMediator = new TabLayoutMediator(tabLayout,viewPager2,new TabLayoutMediator.TabConfigurationStrategy() {
@Override
public void onConfigureTab(@NonNull TabLayout.Tab tab,int position) {
}
});
tabLayoutMediator.attach();
tabLayout.getTabAt(0).setIcon(R.drawable.menu_icon);
tabLayout.getTabAt(1).setIcon(R.drawable.card_icon);
tabLayout.getTabAt(2).setIcon(R.drawable.people_icon);
tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
});
}
private class ScreenSlidePagerAdapter extends FragmentStateAdapter {
public ScreenSlidePagerAdapter(FragmentActivity fa) {
super(fa);
}
@Override
public Fragment createFragment(int position) {
switch (position) {
case 0:
return new FragmentA();
case 1:
return new FragmentB();
case 2:
return new FragmentC();
default:
return null;
}
}
@Override
public int getItemCount() {
return 3;
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。