Смена fragment в CountDownTimer

103
24 мая 2021, 21:50

уважаемые программисты и кодеры, возникла следующая проблема, которую я уже безуспешно пытаюсь исправить без малого день. У меня есть метод Timer(), который при выполнении условия вызывает метод onStop(). Метод onStop() в свою очередь заменяет фрагмент с одно на другой, и вот собственно проблемма: при смене фрагмента нужный фрагмент загружается не один раз, а множество(около 100) если метод onStop вызывается при нажатии кнопки "назад" на телефоне, то всё работает корректно. Подскажите пожалуйста почему так происходит и что нужно исправить?

Метод loadFragment():

public void loadFragment(Fragment fragment) {
        FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
        ft.replace(R.id.fragment_container, fragment);
        ft.commit();
    }

Метод Timer():

public void Timer(){
        mCountDownTimer = new CountDownTimer(20000, 100){
            @Override
            public void onTick(long l) {
                if(mImageSwitcher_1.isShown()||mImageSwitcher_2.isShown()||mImageSwitcher_3.isShown()||
                        mImageSwitcher_4.isShown()|| mImageSwitcher_5.isShown()||mImageSwitcher_6.isShown()||
                        mImageSwitcher_7.isShown()|| mImageSwitcher_9.isShown()) {
                    countTimer = (float) (200 - l/100);
                    countTimer = countTimer/10;
                    timerView.setText("" + countTimer);
                } else {
                    mCountDownTimer.cancel();
                    bool = true;
                    onStop();
                }
            }
            @Override
            public void onFinish() {
                countTimer = 99.0f;
                timerView.setText("Время вышло!");
                onStop();
            }
        }.start();
    }
    @Override
    public void onStop() {
        super.onStop();
        if(bool) {
            activity.result = countTimer;
            activity.scale = 9;
            activity.selectedFragment = new GameoverFragment();
            activity.loadFragment(activity.selectedFragment);
        } else {
            activity.selectedFragment = new MainFragment();
            activity.loadFragment(activity.selectedFragment);
        }
    }

Зараннее спасибо!

READ ALSO
Почему нестатические поля и блоки инициализируются раньше конструктора класса?

Почему нестатические поля и блоки инициализируются раньше конструктора класса?

Ведь конструктор и занимается инициализированием нестатических полей классаНо везде пишут, что нестатические поля и блоки инициализируются...

87
Программное изменение стиля

Программное изменение стиля

У меня есть такой стиль

187
В какой момент происходит удаление Thread из ThreadGroup

В какой момент происходит удаление Thread из ThreadGroup

В коде метода start у класса Thread, текущий поток добавляет себя в группуНа каком этапе объект Thread'а будет удален из группы и собран GC

105