2016-09-20 3 views
1

私はカウントダウンアプリを作ろうとしています。私はまた、同じボタンにもカウントダウンのテキストが表示されますを押すとカウントダウンを開始するボタンがあります。ユーザーがもう一度押すと、カウントダウンを一時停止し、ボタンのテキストを隠しておき、ユーザーがボタンをもう一度押すと、カウントダウンが開始され、テキストが再び表示されます。ボタン用の複数のOnClickListner

問題は、どのようにして1つのボタンに対して複数のOnClickイベントを実行できますか? 私は以下のコードを試しましたが、onClickが1つしか動作していません。また、もう一度押すと、2回目は決して続かないでしょう。onClick

play=(Button)findViewById(R.id.play); 

     play.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 

      //something 
    } 
     }); 

play.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 

      //something 
    } 
     }); 

助けてください。ありがとう!

+1

を。 1つのリスナを使用し、変数を使用してボタンの「状態」を確認するか、ボタンのテキストをチェックして開始/停止する必要があるかどうかを確認することもできます。 – codeMagic

+0

「ボタンの状態」ではありません。ボタンは、他の何か、サービス、メディアプレーヤーなどの状態を反映するだけで、何らかの外部状態に応じてアクションを実行します。 –

答えて

3

リスナーが上書きされます。したがって、2つの異なるものを使用し、状態に応じて設定してください。

public void onCreate(...){ 
    Button mButton = ... 
    mButton.setOnClickListener(startListener); 

} 

View.OnClickListener startListener = new View.OnClickListener() { 

    public void onClick(View v){ 
     // start countdown 
     // show text 

     mButton.setOnClickListener(stopListener); 
    } 
} 

View.OnClickListener stopListener = new View.OnClickListener() { 

    public void onClick(View v){ 
     // stop countdown 
     // hide text 

     mButton.setOnClickListener(startListener); 
    } 
} 

それとも、一つだけリスナーを使用して

public void onCreate(...){ 
    Button mButton = ... 
    mButton.setOnClickListener(listener); 

} 

View.OnClickListener listener = new View.OnClickListener() { 

    public void onClick(View v){ 

     if (isRunning){ 
      // start countdown 
      // show text 
     } else { 
      // stop countdown 
      // hide text 
     } 
    } 
} 
+1

私は最初の解決策が好きです。これは、2つの機能を2つの異なるオブジェクトに分けています。しかし、2つ目のソリューションは、両方の条件に共通の文がある場合、パフォーマンスが向上します。 –

+1

大変感謝しました! –

0

リスナーで使用し、ブール変数を使用してカウントダウンが実行されているかどうかを確認します。ブール値varをtrueまたはfalseに設定し、if文でそれをチェックすることができます。

0

あなたはそれを求めました。私はそれがあなたが本当に望んでいたのか疑いがあります。

List<OnClickListener> listeners = Arrays.asList(
    new OnClickListener { ... }, 
    new OnClickListener { ... }, 
    new OnClickListener { ... }, 
    ... 
); 

play.setOnClickListener(new OnClickListener() { 
    @Override 
    public void onClick(View v) { 
    for (OnClickListener l: listeners) { 
     l.onClick(v); 
    } 
    } 
} 
0

ブールフラグを持つことができる変数に応じて動作を変更することができます。例えば

次のように書くことができます。仕事に行くのではないです

play.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View view) { 
     if (isCountDown) { 
      ...hide count down text 
      isCountDown = false; 
     } else { 
      ...show count down text 
      isCountDown = true; 
     } 
    } 
}); 
関連する問題