Возвращаемое значение из таймера обратного отсчета
Мне нужно вернуть значение из моего countdowntimer, чтобы я мог обновить textView. Я не уверен, как я могу это сделать, я добавил комментарий, где я пытался добавить возврат, но не повезло.
public class BrewTimer extends Activity{
public String secsRemain = "not set";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
System.out.println("Timer Created, we're in the onCreate Method.");
}
public void startBrewTimer(long remaningMillis) {
// Start the Brew Timer
System.out.println("Timer object fired!");
new CountDownTimer(remaningMillis, 1000) {
public void onTick(long millisUntilFinished) {
secsRemain = "seconds remaining: " + millisUntilFinished / 1000;
System.out.println(secsRemain);
return secsRemain; // <-- This is what I want to do
}
public void onFinish() {
System.out.println("Timer Finished!!!");
}
}.start();
}
public void stopBrewTimer() {
//Stop the Brew Timer
}
}
Ответы
Ответ 1
Мне нужно вернуть значение из моего countdowntimer, чтобы я мог обновить TextView.
Нет необходимости делать это. Он работает на нити ui. Вы можете обновить текст в onTick
самостоятельно.
Пример:
public class MainActivity extends Activity {
TextView tv;
public String secsRemain = "not set";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv = (TextView) findViewById(R.id.textView1);
startBrewTimer(200000);
}
private void startBrewTimer(long remaningMillis){
CountDownTimer counter = CountDownTimer(remaningMillis, 1000){
public void onTick(long millisUntilDone){
secsRemain = "seconds remaining: " + millisUntilFinished / 1000;
tv.setText(secsRemain);
}
public void onFinish() {
tv.setText("DONE!");
}
}.start();
}
}
Ответ 2
Вы можете получать значения через широковещательный приемник...... следующим образом:
Сначала создайте свой собственный IntentFilter
as,
Intent intentFilter=new IntentFilter();
intentFilter.addAction("YOUR_INTENT_FILTER");
Затем создайте внутренний класс BroadcastReceiver
as,
private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
/** Receives the broadcast that has been fired */
@Override
public void onReceive(Context context, Intent intent) {
if(intent.getAction()=="YOUR_INTENT_FILTER"){
//HERE YOU WILL GET VALUES FROM BROADCAST THROUGH INTENT EDIT YOUR TEXTVIEW///////////
String receivedValue=intent.getStringExtra("KEY");
}
}
};
Теперь зарегистрируйте свой широковещательный приемник в onResume()
как,
registerReceiver(broadcastReceiver, intentFilter);
И, наконец, отмените регистрацию BroadcastReceiver
в onDestroy()
как,
unregisterReceiver(broadcastReceiver);
Теперь самая важная часть... Вам нужно запустить широковещательную рассылку туда, где вам нужно отправить значения..... так, как,
Intent i=new Intent();
i.setAction("YOUR_INTENT_FILTER");
i.putExtra("KEY", "YOUR_VALUE");
sendBroadcast(i);
Не забудьте принять мой ответ, если вы найдете это удовлетворительным.... cheers:)