Axandar Witam Posiadam taki kod: Handler handler = new Handler(); handler.postDelayed(new Runnable() { @Override public void run() { // Do something after 5s = 5000ms liczba_ciastek = liczba_ciastek + dodawanie_ciastka; wys_ciastka.setText("Masz "+liczba_ciastek+" ciastek"); } }, 1000); return; Chciałbym, aby teks w wys_ciastka zmieniał sie co sekundę o wartośc dodawanie_ciastka lecz przy tym kodzie jest wykonywana tylko jedna operacja, albo tylko tylko raz odświeża się zmienna
derjack Bo postDelayed() wykonuje czynność tylko raz. Ustaw ten Runnable do zmiennej i w Runnable daj postDelayed() (taka jakby rekurencja). Runnable runnable = new Runnable() { @Override public void run() { // Do something after 5s = 5000ms liczba_ciastek = liczba_ciastek + dodawanie_ciastka; wys_ciastka.setText("Masz "+liczba_ciastek+" ciastek"); handler.postDelayed(runnable, 1000); } } handler.postDelayed(runnable, 1000); return;
Dzakus Stwórz normalny Handler, który odbiera dane wiadomości(handleMessange) i potem w nim na końcu this.sendEmptyMessageDelayed( MESSAGE_COOKIE,500); spowoduje to "pętle" nieskończoną. Ten sposób jest stosowany żywiołowo w kodzie Androida. Nie polecam metody wyżej, bo idzie potem się pogubić.
Axandar Dziękuję za wszystkie odpowiedzi. Jest to forum dla początkujących, więc pozwolę sobie na to pytanie. Czy mógłby ktoś (Ciebie Dzakus bym o to prosił) podać jakiś przykładowy kod na te handleMessage?(W google próbowałem szukać, ale jakoś nic nie wychodziło).
Dzakus Tego jest pełno w kodzie Androida tam gdzie jest GUI. https://android.googlesource.com/platform/packages/apps/Settings/+/android-4.4.2_r2/src/com/android/settings/SoundSettings.java 105 https://android.googlesource.com/platform/packages/apps/Settings/+/android-4.4.2_r2/src/com/android/settings/RadioInfo.java 176 https://android.googlesource.com/platform/packages/apps/Settings/+/android-4.4.2_r2/src/com/android/settings/BatteryInfo.java tutaj idealny przykład tego co chcesz osiągnać.
Axandar Handler handler = new Handler(){ public void handleMessage(Message msg) { sendEmptyMessageDelayed(liczba_ciastek, 500); return; } }; handler.postDelayed(new Runnable() { @Override public void run() { // Do something after 5s = 5000ms liczba_ciastek = liczba_ciastek + dodawanie_ciastka; } }, 1000); return; } Teraz posiadam takie coś, lecz jest tam coś źle, ale nie wiem co.
Dzakus private static final int EVENT_TICK = 1; private Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { switch (msg.what) { case EVENT_TICK: updateCiasteczka(); sendEmptyMessageDelayed(EVENT_TICK, 1000); break; } } }; @Override public void onResume() { super.onResume(); mHandler.sendEmptyMessageDelayed(EVENT_TICK, 1000); } @Override public void onPause() { super.onPause(); mHandler.removeMessages(EVENT_TICK); } private void updateCiasteczka() { liczba_ciastek = liczba_ciastek + dodawanie_ciastka; } Taki jest poprawny kod.