Кнопка переключения в приложении Android - PullRequest
0 голосов
/ 14 февраля 2012

Я пытаюсь сделать обычную кнопку, которая работает как кнопка переключения, но у меня возникают некоторые проблемы.Я новичок в Java и ООП, так что будьте осторожны.

Сначала моя кнопка скажет «Нажми меня».Когда моя кнопка нажата, я хочу, чтобы на кнопке появился обратный отсчет, и, пока она ведет обратный отсчет, я хочу иметь возможность нажать ее еще раз, чтобы отменить обратный отсчет и вернуться в исходное состояние.На данный момент я могу нажать кнопку, начать обратный отсчет и отменить его, но я не могу понять, как заставить кнопку вернуться к исходному виду «Нажми меня» (если она была нажата снова, обратный отсчетначнется снова, и это может быть отменено снова).

Я пытался использовать тумблер, но чувствую, что я близок к тому, чтобы заставить это работать.Есть идеи?Вот код, с которым я сейчас работаю:

    button.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            new CountDownTimer(4000, 1000) {

                @Override
                public void onFinish() {
                    button.setText("SENT");                 
                }

                @Override
                public void onTick(long sec) {
                    button.setText("CANCEL (" + sec / 1000 + ")");
                    button.setOnClickListener(new OnClickListener() {

                        @Override
                        public void onClick(View v) {
                            cancel();

                        }

                    });

                }
            }.start();
        }
    });

Ответы [ 2 ]

1 голос
/ 14 февраля 2012

Я думаю, я бы просто оставил флаг boolean, чтобы посмотреть, работает таймер или нет.Нечто подобное (не проверено)

button.setOnClickListener(new OnClickListener() {
    private boolean running = false;
    private CountDownTimer timer;
    @Override
    public void onClick(View v) {
      if(!running)
      {
        running = true;
        timer = new CountDownTimer(4000, 1000) {

            @Override
            public void onFinish() {
                button.setText("SENT");                 
            }

            @Override
            public void onTick(long sec) {
                button.setText("CANCEL (" + sec / 1000 + ")");

            }
        }.start();
      }
      else
      {
         timer.cancel();
         button.setText("Press Me");
         running = false;
      }
    }
});
0 голосов
/ 14 февраля 2012

Если я правильно понимаю проблему: отображается таймер обратного отсчета, и при отмене вы хотите, чтобы таймер остановился и кнопка вернулась к «НАЖМИТЕ МЕНЯ»

У CountDownTimer есть «особенность», при которой он не можетотменить себя от OnTick ... Я знаю, что это чокнутый.

К счастью, кто-то написал замену в классе.https://gist.github.com/737759

Я использую этот класс в одном из своих приложений.Просто создайте класс в своем проекте под названием «CountDownTimer».Удалите ваш импорт для "android.os.CountDownTimer", и он должен работать.

РЕДАКТИРОВАТЬ: РЕ НАСТРОЙКА ОТВЕТА

Я заметил, что у вас есть 2 onClick для кнопки.

Я рекомендую следующее:

1) Создайте логическое значение с именем "isCounting" 2) Установите для "isCounting" значение FALSE в вашем методе Activity onCreate 3) Создайте CountDownTimer отдельно

CountDownTimer cdt;

// setup countdown timer
cdt = new CountDownTimer(intMilli, 1000)
{

   @Override
   public void onFinish() 
   {
      //your code
   }

   @Override
   public void onTick(long millisUntilFinished) 
   { 
      //your code
   }
};

4) В onClick вашей кнопки проверьте "isCounting"

if (isCounting == FALSE)
{
   cdt.start();
   isCounting = TRUE;
}

else
{

   cdt.cancel();
   isCounting = FALSE;
   button.setText("PRESS ME");
}
...