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

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

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

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

26.09.2011, 09:32. Просмотров 1849. Ответов 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());
            }
        });
    }
    
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
mutagen
2560 / 2233 / 72
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
26.09.2011, 14:13 #2
попробуй запускать хронометр в отдельном потоке
0
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 строке что-то надо было?
0
Avator
0 / 0 / 0
Регистрация: 01.04.2013
Сообщений: 4
05.08.2015, 17:32 #4
между 23 и 24 добавить
Java
1
chronom.setBase(SystemClock.elapsedRealtime());

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

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