20

ボタンは、一度だけ呼び出す必要があるアクションをトリガーします。アクションが実行される前に、onClick ハンドラーでボタンが無効になり、非表示になります。

someButton.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        someButton.setEnabled(false);
        someButton.setClickable(false);
        someButton.setVisibility(View.GONE);
        performTaskOnce();
        }
    });

private void performTaskOnce() {
    Log.i("myapp", "Performing task");
    //Do something nontrivial that takes a few ms (like changing the view hierarchy)
}

ボタンはすぐに無効になりますが、非常にすばやく複数回タップすることで、複数の「onClick」イベントをトリガーすることができます。(つまりperformTaskOnce、複数回呼び出されます)。ボタンが実際に無効になる前に、onClickイベントがキューに入れられているようです。

対応するボタンが既に無効になっているかどうかをすべての onClick ハンドルでチェックすることで問題を解決できましたが、それはハックのようです。この問題を回避するより良い方法はありますか?

問題は Android 2.3.6 で発生し、Android 4.0.3 では再現できません。しかし、4.x デバイスの希少性を考えると、古いデバイスを除外することはできません。

4

5 に答える 5

8

ボタンがクリックされたときにブール変数を true に設定し、クリックの処理が完了したら false に設定できます。

このようにして、複数のクリックを無視し、ボタンを無効にする必要がないため、ボタンのちらつきを回避できます。

boolean processClick=true;
someButton.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        if(processClick)
         {
        someButton.setEnabled(false);
        someButton.setClickable(false);
        someButton.setVisibility(View.GONE);
        performTaskOnce();
         }
        processClick=false; 
        }
    });

private void performTaskOnce() {
    Log.i("myapp", "Performing task");
    //Do something nontrivial that takes a few ms (like changing the view hierarchy)
}
于 2012-06-01T12:43:04.490 に答える
1

少し遅れましたが、これは誰かに役立つかもしれません。私の場合、別のアクティビティをそう呼んでいます。

ブール値を宣言します。

boolean clickable;

クリック リスナーで。

if(clickable){
   // Launch other activity
   clickable = false;
}

onResume が呼び出されたときに有効にします。

@Override
public void onResume() {
    Log.e(TAG, "onResume");
    super.onResume();
    clickable = true;
}
于 2014-03-24T07:19:22.083 に答える
-1

変数を宣言し、それを次のように使用します

 boolean boo = false;
 someButton.setOnClickListener(new OnClickListener() {
 @Override
 public void onClick(View v) {
 if(boo==false){
    someButton.setEnabled(false);
    someButton.setClickable(false);
    someButton.setVisibility(View.GONE);
    boo = true;
 }


    }
});

これにより、ボタンの複数回のクリックを防ぐことができます

それが役立つことを願っています

于 2012-06-01T10:07:29.580 に答える