Секундомер получает статическое значение из runnable, редактируя переменную внутри runnable

Я собираюсь создать секундомер, и у меня возникли проблемы. Мой код выглядит так:

1 Для кнопки "Пуск":

    start.setOnClickListener(new OnClickListener() {
        @Override
    public void onClick(View v) {
               // some code
      mHandler.removeCallbacks(mUpdateTimeTask);
      mHandler.postDelayed(mUpdateTimeTask, 1);
      start.setText("Lap");
     }});

2 Для исполняемых:

public Runnable mUpdateTimeTask = новый Runnable() {

     public void run() {
          EditText licznik = (EditText)findViewById(R.id.editText1);
          // some code
          licznik.setText(time+"");
mHandler.postDelayed(this, 1);

      }
   };

Мой секундомер отлично работает для: Старт, Стоп.

Но я не могу создать внутри действие onclicklistener кнопки сброса: licznik.setText("");, потому что licznik инициируется внутри mUpdateTimeTask, я также не могу переместить licznik за пределы mUpdateTimeTask, потому что тогда он не работает.

Кроме того, как вы заметили, моя кнопка запуска после щелчка изменится на круг, и круг должен фактически получить время от запуска. Я понятия не имею, как это сделать, потому что runnable является динамическим.

У кого-нибудь есть решение?


person Emilia Skrzynecka    schedule 14.03.2013    source источник
comment
почему вы не можете сделать mUpdateTimeTask неанонимную реализацию Runnable с конструктором, который принимает licznik в качестве параметра? Таким образом, вы сможете разделить licznik между слушателем и mUpdateTimeTask...   -  person Victor Sorokin    schedule 14.03.2013
comment
Вы имеете в виду создание класса mUpdateTimeTask, реализующего Runnable? если да, я пытался это сделать, но тогда я не могу использовать mHandler, если нет, объясните мне, как это сделать   -  person Emilia Skrzynecka    schedule 15.03.2013
comment
Не могли бы вы показать код, в котором вы пытаетесь создать mUpdateTimeTask implements Runnable и почему он не справляется с вашей задачей?   -  person Victor Sorokin    schedule 15.03.2013
comment
вы уверены, что я пытался сделать что-то вроде этого: открытый класс mUpdateTimeTask реализует Runnable{ Runnable rr = new Runnable(public void run(){ // некоторые мои сотрудники}); } После этого, когда я попытался использовать обработчик: mHandler.postDelayed(mUpdateTimeTask.this.rr, 1); у меня ошибка   -  person Emilia Skrzynecka    schedule 16.03.2013


Ответы (1)


Не уверен, что это поможет, но вы можете создать Runnable следующим образом:

class UpdateTimeTask implements Runnable {
    private final EditText whatever;

    UpdateTimeTask(EditText whatever) {
        this.whatever = whatever;
    }

    @Override
    public void run() {
        // act upon whatever
    }
}
person Victor Sorokin    schedule 15.03.2013