我有一个带抽屉菜单的User Activity类(包括主页,我的个人资料等)。当用户单击菜单项之一时,我将加载片段,例如HomePageFragment,MyProfilFragment等。
这是代码示例:
public void navigationItemSelectedListener(DrawerLayout drawerLayout, NavigationView navigationView) {
navigationView.setNavigationItemSelectedListener(menuItem -> {
menuItem.setChecked(true);
int menuId = menuItem.getItemId();
switch (menuId){
case R.id.home_menu_item:
loadFragment(new HomePageFragment());
break;
// goes like that
这是loadFragment:
public void loadFragment(Fragment fragment) {
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.user_page_activity_frame_layout, fragment);
fragmentTransaction.commit();
}
}
现在我已经在HomePageFragment中运行CountDownTimer(60秒),当计数器为0时,我将运行一些方法()。
但是我不能这样做。因为每次用户浏览新项目时,然后回到Homepage菜单项时,都会创建新的HomePageFragment(),因此CountDownTimer一次又一次地以60s开始。即使用户导航另一个菜单,我也希望CounDownTimer运行什么。
请注意,我尝试将HomePageFragment属性创建为全局属性。但这没有用。 (就像2个计时器倒计时。一个说60-59 ...另一个说30-29 ...)
答案 0 :(得分:1)
这里的问题是,每次用户导航到另一个项目时,您的Fragment
就被销毁。
要解决这个问题
1。要么在您的主机活动中创建计时器,要么在片段中创建片段,也许在navigationItemSelectedListener()
2。确保片段不会每次都被破坏。选中How to resume Fragment from BackStack if exists