Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Mingorto
0 / 0 / 0
Регистрация: 12.08.2015
Сообщений: 6
#1

Борьба за TextView при работе с CountDownTimer - Программирование Android

26.01.2016, 18:46. Просмотров 236. Ответов 1

Добрый день. Проблема заключается в следующем: есть таймер, наследованный от CountDownTimer, его значение передается в TextView. Также присутствуют две кнопки - старт и пауза. При повторном нажатии на старт должен происходить перезапуск таймера. Это происходит, но весьма странным образом. TextView получает два и более значения одновременно и получается, что в одну секунду отображаются два и более значения одновременно. Как "убить" предыдущий таймер?

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
 
    TextView mTimer;
    ImageButton startButton, pauseButton;
    int timeToEnd = 25000;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        mTimer = (TextView) findViewById(R.id.tv);
        startButton = (ImageButton) findViewById(R.id.startButton);
        pauseButton = (ImageButton) findViewById(R.id.pauseButton);
        startButton.setOnClickListener(this);
        pauseButton.setOnClickListener(this);
    }
 
    @Override
    public void onClick(View v) {
        final TimerClass timer = new TimerClass(timeToEnd, 1000);
        switch (v.getId()) {
            case R.id.startButton:
                startButton.setOnClickListener(this);
                timer.start();
                break;
            case R.id.pauseButton:
                pauseButton.setOnClickListener(this);
                timer.cancel();
        }
    }
 
    public class TimerClass extends CountDownTimer {
        public TimerClass(long milliFuture, long interval) {
            super(milliFuture, interval);
        }
 
        @Override
        public void onTick(long millisUntilFinished) {
            long millis = millisUntilFinished;
            String hhmmss = String.format("%02d:%02d:%02d", TimeUnit.MILLISECONDS.toHours(millis),
                    TimeUnit.MILLISECONDS.toMinutes(millis) - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(millis)),
                    TimeUnit.MILLISECONDS.toSeconds(millis) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millis)));
            mTimer.setText(hhmmss);
        }
 
        @Override
        public void onFinish() {
            mTimer.setText("Completed");
        }
    }
 
    public void showSetting() {
        Intent intent = new Intent(this, Prefs.class);
        startActivity(intent);
    }
 
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuItem mi = menu.add(0, 0, 0, "Settings");
        mi.setIntent(new Intent(this, Prefs.class));
        return super.onCreateOptionsMenu(menu);
    }
}
P.S. Пробовал старую реализацию, там этой проблемы нет, но она мне не подходит, так как время должно задаваться извне и изменяться по желанию пользователя, а не быть строго фиксированным.

Java
1
2
3
btnStart.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.01.2016, 18:46
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Борьба за TextView при работе с CountDownTimer (Программирование Android):

Текст из TextView перенести в другой TextView по нажатию Button - Программирование Android
Люди, помогите плиз. Недавно начал ковырять программирование под Android. Хотел сделать банальную вещь - текст из TextView перенести в...

TextView txt = new TextView(this); - ошибка - Программирование Android
Возникла проблема с динамическим создание TextView в цыкле, хотя в другом месте создается таким же образом все нормально TextView txt =...

Не могу остановить CountDownTimer - Программирование Android
Всем доброго времени суток. Пытаюсь написать таймер обратного отсчета до определенной даты и времени. И все работает хорошо, до момента...

Сделать бесконечный CountDownTimer - Программирование Android
Использую CountDownTimer он в моем случае удобней обычного Timer, но проблема в том , что время его работы ограничено как 990000000, можно...

CountDownTimer запуск в цикле - Программирование Android
У меня есть класс где я реализовал таймер: package com.lineup.intervaltimer; import android.os.CountDownTimer; public class...

Не изменяется текст в TextView при звонке - Программирование Android
Здравствуйте. Пытаюсь реализовать следующее: Есть activity, где проигрывается аудио. Хочу чтобы при входящем звонке в TextView появлялась...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Pablito
2470 / 1915 / 595
Регистрация: 12.05.2014
Сообщений: 6,740
Завершенные тесты: 1
27.01.2016, 11:43 #2
код бредовый
- непонятно зачем два раза назначать слушатели (в onCreate а потом еще каждый раз по клику)
- у CountDownTimer нет паузы, это таймер обратного отсчета - он или идет или он кансельнут

как одно из возможных решений - написать свой Runnable с методами start, pause, stop
и запустить его как TimerTask с периодом в 1 секунду

по вызову pause выставлять внутри этой задачи флаг - и пропускать какие-то дествия, в том числе декремент счетчика
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.01.2016, 11:43
Привет! Вот еще темы с ответами:

Как убить поток в CountDownTimer? - Программирование Android
Привет, бойцам невидимого фронта! есть эдакий кастомный CountDownTimer.java: package com.dis.medprog; /* * Copyright (C)...

Остановка выполнения таймера (CountDownTimer) из другого класса - Программирование Android
При входе в активити в методе onCreate выполняется таймер: new CountDownTimer(40000, 1000) { public void onTick(long...

Программа падает при попытке задать текст TextView в диалоговом окне - Программирование Android
Лог: java.lang.IllegalStateException: Could not execute method of the activity at...

При вводе слов из Википедии брать значение этого слова и отображать в TextView - Программирование Android
Всем привет создаю программу , и хочу чтобы при вводе слов из википедии бралось значение этого слова и отображалось в TextView


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru