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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.64
mindzu
22 / 5 / 1
Регистрация: 08.09.2011
Сообщений: 13
#1

Хронометр - Программирование Android

26.09.2011, 09:32. Просмотров 1772. Ответов 3
Метки нет (Все метки)

Делаю в программе простейший хронометр с 3 кнопками - Start, Stop и Reset. Хронометр почему-то срабатывает так: отсчет начинается сразу после запуска программы, хотя и не отображается. После нажатия на кнопку Старт, на таймере отображается то время, которое прошло с запуска программы и продолжается дальнейший счет. При нажатии на кнопку Стоп отсчет все равно продолжается, но перестает отображаться (показывается то время, которое было во время нажатия). Если опять нажать на кнопку старт, то отсчет продолжается, как будто я его и не останавливал. Кнопка Резет обнуляет время, но тоже не останавливает, отсчет сразу же идет с нуля.
Это мой косяк или так и должно быть?
Текст программы:
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
import android.app.Activity;
import android.os.Bundle;
import android.os.SystemClock;
import android.widget.Chronometer;
import android.widget.Button;
import android.view.View;
import android.view.View.OnClickListener;
 
public class ChronometerActivity extends Activity  {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
 
        final Button bstart = (Button)findViewById(R.id.bstart);
        final Button bstop = (Button)findViewById(R.id.bstop);
        final Button breset = (Button)findViewById(R.id.breset);
        
        final Chronometer chronom = (Chronometer)findViewById(R.id.chronom);
        
        bstart.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                chronom.start();
            }
        });
        
        bstop.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                chronom.stop();
            }
        });
        
        breset.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                chronom.setBase(SystemClock.elapsedRealtime());
            }
        });
    }
    
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
mutagen
2554 / 2227 / 72
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
26.09.2011, 14:13     Хронометр #2
попробуй запускать хронометр в отдельном потоке
mindzu
22 / 5 / 1
Регистрация: 08.09.2011
Сообщений: 13
26.09.2011, 18:04  [ТС]     Хронометр #3
Попробовал, то же самое.
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
64
65
66
67
68
import android.app.Activity;
import android.os.Bundle;
import android.os.SystemClock;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.widget.Chronometer;
import android.widget.Button;
import android.view.View;
import android.view.View.OnClickListener;
 
public class ChronometerActivity extends Activity  {
    
    private Handler handler;
    private boolean isrunning = false;
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
 
        final Button bstart = (Button)findViewById(R.id.bstart);
        final Button bstop = (Button)findViewById(R.id.bstop);
        final Button breset = (Button)findViewById(R.id.breset);
        
        final Chronometer chronom = (Chronometer)findViewById(R.id.chronom);
        
        handler = new Handler() {
            @Override
            public void handleMessage (Message msg){
                //
            }
        };
        
        bstart.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                new Thread (new Runnable() {
                    public void run() {
                        while (isrunning){
                            try {Thread.sleep(100);}
                            catch(InterruptedException e){Log.e("ERROR", "Thread interrupted");}
                            handler.sendMessage(handler.obtainMessage());
                        }
                    }
                });
                isrunning = true;
                chronom.start();
            }
        });
        
        bstop.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                isrunning = false;
                chronom.stop();
            }
        });
        
        breset.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                chronom.setBase(SystemClock.elapsedRealtime());
            }
        });
    }
    
}
В 31 строке что-то надо было?
Avator
0 / 0 / 0
Регистрация: 01.04.2013
Сообщений: 4
05.08.2015, 17:32     Хронометр #4
между 23 и 24 добавить
Java
1
chronom.setBase(SystemClock.elapsedRealtime());

мне с аналогичной проблемой помогло
Yandex
Объявления
05.08.2015, 17:32     Хронометр
Ответ Создать тему
Опции темы

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