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

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

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

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

30.01.2016, 20:12. Просмотров 111. Ответов 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
Приложение останавливается сразу после открытия Android
Android Как вытащить данные из потока. Cant create handler inside thread that has not called Looper.prepare()
Android Изменить время устройства
Android Изменить имя ресурса во время выполнения программы
Android Падает приложение сразу после on Create
Android Ошибка в v23 сразу после создания проекта
Android Handler
Android Handler
Сразу после нажатия Power вызывается OnCreate. Почему? Android
Android Почему Android Studio не сразу подхватывает изменения кода(только после переустановки apk)?
Android Событие после изменения текста в TextView

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

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

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