如何 运行 Fragment 中的 CountDownTimer

How to run CountDownTimer in Fragment

我有一个用户 Activity class,它有抽屉菜单(包括主页、我的个人资料等)。当用户单击菜单项之一时,我将加载 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

这是加载片段:

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 时,我将 运行 一些方法 ()。

但是我不能那样做。因为每次用户浏览新项目时,然后返回主页菜单项时,都会创建新的 HomePageFragment(),因此 CountDownTimer 以60 年代一次又一次。即使用户导航另一个菜单,我也希望 CounDownTimer 运行。

请注意,我曾尝试将 HomePageFragment 属性创建为全局属性。但它没有用。 (就像 2 个计时器倒计时。一个说 60-59...另一个说 30-29...)

这里的问题是,每次用户导航到另一个项目时,您的 Fragment 都会被销毁。

解决这个问题

1.Either 在您的主机中创建计时器 activity 而不是片段,可能在 navigationItemSelectedListener()

2.Make 确保您的片段不会每次都被破坏。检查 How to resume Fragment from BackStack if exists