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

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

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

Как сразу изменить время для handler после его изменения в настройках? - Программирование Android

30.01.2016, 20:12. Просмотров 118. Ответов 0
Метки нет (Все метки)

Добрый день. В общем, суть проблемы в следующем - есть "помодоро" таймер, в нем можно в настройках изменять время. Но проблема в том, что если, например, закончилось время отдыха, то я не могу изменить время работы, оно меняется только на следующий раз. Как сделать так, чтобы время изменялась сразу же? Спасибо)

MainActivity
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    private final String TAG = "PomodoroTimer count";
    SharedPreferences sharedPreferences;
    private TextView mTimer;
    private Button startButton, pauseButton;
    int TIME_WORK_SESSION;//время работы(в секундах)
    int TIME_REST_SESSION;//время отдыха(в секундах)
    int BIG_REST_SESSION;
    private int seconds;
    private boolean isRunning;
    private boolean isWork;
    private boolean timeStop, workOrRest;
    private boolean textSwitcher = true;
    private int bigTomato = 0;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mTimer = (TextView) findViewById(R.id.tv);
        startButton = (Button) findViewById(R.id.startButton);
        pauseButton = (Button) findViewById(R.id.pauseButton);
        startButton.setOnClickListener(this);
        pauseButton.setOnClickListener(this);
        seconds = TIME_WORK_SESSION;
        isWork = true;
 
        sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
        seconds= Integer.parseInt(String.valueOf(sharedPreferences.getString("work_time", "5")));
        //Скрыть Action bar
        //getSupportActionBar().hide();
        runTimer();
    }
 
    @Override
    protected void onResume() {
        TIME_WORK_SESSION = Integer.parseInt(String.valueOf(sharedPreferences.getString("work_time", "5")));
        TIME_REST_SESSION = Integer.parseInt(String.valueOf(sharedPreferences.getString("short_break", "2")));
        BIG_REST_SESSION = Integer.parseInt(String.valueOf(sharedPreferences.getString("big_short", "7")));
        super.onResume();
    }
 
    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.startButton:
                textSwitcher = false;
                timeStop = true;
                isRunning = true;
                break;
            case R.id.pauseButton:
                isRunning = false;
        }
    }
 
    //Настройка тайера
    private void runTimer() {
        final Handler handler = new Handler();
        handler.post(new Runnable() {
            @Override
            public void run() {
                    int hours = seconds / 3600;
                    int minutes = (seconds % 3600) / 60;
                    int secs = seconds % 60;
                    String time = String.format("%d:%02d:%02d", hours, minutes, secs);
                if (textSwitcher) {
                    if (workOrRest)
                        mTimer.setText("Rest");
                    else mTimer.setText("Work");
                }
                else
                    mTimer.setText(time);
                    if (timeStop) {
                        if (isRunning && isWork && seconds == 0) {
                            int rest;
                            isWork = false;
                            if (bigTomato == 3) { //Уход на большой перерыв
                                rest = BIG_REST_SESSION;
                                bigTomato = -1;
                            } else //Уход на меленький перерыв
                                rest = TIME_REST_SESSION;
                            seconds = rest;
                            textSwitcher = true;
                            workOrRest = true;
                            timeStop = false;
                        } else if (isRunning && !isWork && seconds == 0) {
                            isWork = true;
                            seconds = TIME_WORK_SESSION;
                            timeStop = false;
                            bigTomato += 1;
                            Log.d(TAG, "big Tomato count = " + bigTomato);
                            workOrRest = false;
                            textSwitcher = true;
                        } else if (isRunning) {
                            seconds--;
                        }
                    }
                    handler.postDelayed(this, 1000);//handler.post(this);
                }
        });
    }
 
    //Создание меню настроек
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuItem menuItem = menu.add(0, 1, 0, "Setting");
        menuItem.setIntent(new Intent(this, Prefs.class));
        return super.onCreateOptionsMenu(menu);
    }
}
Файл настроек
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
public class Prefs extends PreferenceActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        PreferenceScreen rootScreen = getPreferenceManager().createPreferenceScreen(this);
        setPreferenceScreen(rootScreen);
 
        EditTextPreference etp1 = new EditTextPreference(this);
        etp1.setKey("work_time");
        etp1.setTitle("Работа");
        etp1.setDefaultValue("3");
        etp1.setDialogTitle("Сколько вы будете работать?");
 
        EditTextPreference etp2 = new EditTextPreference(this);
        etp2.setKey("short_break");
        etp2.setTitle("Короткий перерыв");
        etp2.setDefaultValue("5");
        etp2.setDialogTitle("Сколько вы будете отдыхать?");
 
        EditTextPreference etp3 = new EditTextPreference(this);
        etp3.setKey("big_short");
        etp3.setTitle("Большой перерыв");
        etp3.setDefaultValue("7");
        etp3.setDialogTitle("Сколько вы будете отдыхать");
 
        rootScreen.addPreference(etp1);
        rootScreen.addPreference(etp2);
        rootScreen.addPreference(etp3);
 
    }
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.01.2016, 20:12     Как сразу изменить время для handler после его изменения в настройках?
Посмотрите здесь:

Размер виджета рабочего стола, после изменения его размера Android - Программирование Android
Здравствуйте, коллеги. Столкнулся с проблемой при разработке виджета для рабочего стола. С появлением возможности изменения размера...

Как вытащить данные из потока. Cant create handler inside thread that has not called Looper.prepare() - Программирование Android
В общем столкнулся со следующей неприятной проблемой. Есть клиент. Он запрашивает у сервера некоторые данные. Сервер эти данные посылает...

Падает приложение сразу после on Create - Программирование Android
import android.app.Activity; import android.content.Context; import android.content.Intent; import android.content.res.Configuration;...

Приложение останавливается сразу после открытия - Программирование Android
Приложение открывается и сразу has stoped просто пытаюсь присвоить текст TextView package com.example.time; import...

Ошибка в v23 сразу после создания проекта - Программирование Android
Я только создал новый проект, а Android Studio уже закидывает меня ошибками. Error:(1) Error retrieving parent for item: No resource...

Изменить время устройства - Программирование Android
Подскажите как изменить дату и время на устройстве?

Сразу после нажатия Power вызывается OnCreate. Почему? - Программирование Android
Здравствуйте. Пишу вообще под Mono.Android, но в той ветке глухо, да и код очень похож на Java, так что это я думаю не проблемма, да и...

Не могу обновить RecyclerView после изменения item - Программирование Android
данные для списка берутся из Firebase, у DatabaseReference//Firebase, есть два метода: onChildAdd и onChildChanged, первый...

Как добавить андройд-проект в Eclips с Андройдом чтобы после его можно было запустить на виртуальной машине? - Программирование Android
Вот у меня с интернета скачан готовый андрой-проект, но я не знаю как его добавить в остальные проекты чтобы запустить на виртуальной...

Handler и интервал времени - Программирование Android
Создаю хэндлер: Handler h = new Handler(); h.post(obrtimer); Runnable obrtimer = new Runnable() { public void run() { ...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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