2012-12-17 14 views
5

Androidでは、ユーザーがボタンを複数回押すと、実際にはonClickイベントが複数回発生します。どのような意味があるのでしょうか。ユーザーがボタンを2回以上押すとonClickイベントが複数回発生するのを避けるにはどうすればいいですか?

onClick

方法は、新しいActivityを起動する場合、ユーザは、同じActivity複数回開くことができ、Activityの各インスタンスは、スタックの一番上に積み重ねられます。

私は通常(ボタンに関連付けられている)onClickメソッド内のボタンを無効にし、HandlerpostDelayを使用した後に再び秒のカップルを、それを有効にします。

私は本当にこのようにしたくないので、この問題をよりクリーンな方法で近づける別の方法がありますか?

+0

ebable /ボタンを無効 – Blackbelt

答えて

0

きれいな方法:

呼び出したい事は、そうでない場合は、それを起動し、nullしていないされている場合は、ボタンをクリックした後。

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 

または

intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); 

を複数の開始を避けるために:あなたもあなたの意思のための余分を渡すことができ取り組み場合

1

他の方法は、複数のクリックを防ぐクリックを管理している間に、ダミーブール値を持つことです。例と

UPDATE:

boolean processingClick = false; 
Button b = new Button(); 
b.setOnClickListener(new View.OnClickListener() { 
    @Override public void onClick(View v) { 
     if (!processingClick) { 
      processingClick = true; 

      //your code here 

      processingClick = false; 
     } 
    } 
}); 
+2

FLAG_ACTIVITY_CLEAR_TOPはおそらく...それ以外の活動は、それぞれのonclickイベントで再作成されFLAG_ACTIVITY_SINGLE_TOPとの組み合わせで動作します私には良いようです。私はAndroid APIから何らかの制御を期待していましたが、ダミーブールアプローチは完璧に機能します。 –

+0

ええ、私も。私はstartActivityメソッドのほんの少し遅れていると思いますが、プラットフォームが何かできるかどうかはわかりません。 – Aballano

+0

誰かがダミーブール値法をどのように達成するかを詳しく教えてください。任意のコード例?乾杯。 – user280109

0

Actitivty内のすべてのボタンのためのメソッドを作成します。

public void enableButtons(boolean doit){ 
    bXXX.setClickable(doit); 
    ... 
    ... 
} 

"OnClickListenerを実装"

@Override 
public void onClick(View view) { 
    enableButtons(false); 
    switch (view.getId()) { 
     case R.id.xxx: 
      doWhatYouWant(); 
      break; 
     ... 
     ... 
    } 
} 

OnResumeを使用している場合は、あなたを活性化させますボタンをもう一度...

@Override 
protected void onResume() { 
    super.onResume(); 
    enableButtons(true); 
} 
関連する問題