2012-02-14 17 views
0

トグルボタンのように機能する通常のボタンを作ろうとしていますが、いくつかの問題が発生しています。私はJavaとOOPの初心者ですので、やさしくしてください。Androidアプリのトグルボタン

最初、私のボタンは「Press Me」と表示されます。私のボタンを押すと、ボタンにカウントダウンが表示され、カウントダウンしている間、カウントダウンをキャンセルして元の状態に戻すには、もう一度押すことができます。現在のところ、ボタンを押してカウントダウンを開始してキャンセルすることはできますが、ボタンを元の状態に戻す方法を理解することはできません。「プレスミー」(もう一度押すと、カウントダウン最初からやり直すことができます)。

私はトグルボタンを使ってみましたが、これを動作させるのにはかなり近いと感じています。何か案は?ここで私は今で働いているコードは次のとおりです。

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(); 
     } 
    }); 

答えて

1

「isCounting」私はちょうどを維持するだろうと思いますタイマーが実行中かどうかを確認するフラグ。そのようなもの(テストされていない)

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

これは完璧に動作します!ありがとう! – mkyong

0

私が正しく問題を理解していれば:カウントダウンタイマーが表示され、あなたがキャンセルしたときには、タイマーが停止すると、ボタンが「MEを押す」に戻します

CountDownTimerはOnTickから自分自身を取り消すことができない "機能"を持っています...私はそれがナットだと知っています。

幸いなことに、誰かがクラスに入れ替えをしました。 https://gist.github.com/737759

このクラスは私のアプリケーションの1つで使用します。あなたのプロジェクトで "CountDownTimer"というクラスを作成するだけです。 "android.os.CountDownTimer"のインポートを削除するとうまくいくはずです。

EDIT:ANSWER

の調整RE私はあなたがボタンの2のonClickのを持っていることに気づきました。私は次のことをお勧めします

1)ブールの作成は、あなたの活動のonCreateメソッド 3にFALSEに "isCounting" 2)セット "isCounting" と呼ばれる)を別々

CountDownTimer cdt; 

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

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

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

をCountDownTimerを作成します。 4)あなたのボタンのonClickでチェック

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

else 
{ 

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

大丈夫です。このクラスを追加したところ、正しく動作しています。しかし、これを使ってボタンを元に戻すにはどうすればいいですか?私は本当にそれを理解するために苦労しています。 – mkyong

+0

あなた(あなたのonClick内)button.setText( "PRESS ME"); after cancel(); – Tony

+0

しかし、ボタンのテキストを変更して、もう一度押すことはできません。それはカウントダウンを開始しないことを意味します。 – mkyong

関連する問題