6

クリックすると別のアクティビティをロードするボタンがありますが、それを連続してタップすると、別のアクティビティをロードする前に、アクティビティを起動しますが、同じアクティビティが2回以上ロードされます。button.setOnClickListener ... onClickの直後にbutton.setEnabled(false)を試しましたが、ボタンが無効になっていません。ボタンがタップされるとすぐにテキストもログに記録されるため、タップによってはテキストがログに記録されます2または10回タップしても3回。ここで私が感じているのは、ボタンがタップイベントをリッスンする前です。ボタンをタップするのと同じくらい速く、すべてのイベントをリッスンするほど速くタップしています。

したがって、ボタンが1回タップするだけで、それを無効にできるものが必要です。

助けてください

4

7 に答える 7

7

その既知の問題。基本的に、uはフラグを設定できます。

int flag=1;

 @Override
        public void onClick(View v) 
           {

                if(flag)
                 {
                   button.setEnabled(false);
                   Log.d("ins", "called");
                 }
                flag=0;
            }
于 2012-06-14T11:17:49.487 に答える
4

より好ましい解決策は、

onclick(){
  btn.setEnabled(false);
  btn.setClickable(false);
  //yourwork
  myWork();
}

myWork(){
 //your tasks.
 btn.setEnabled(true);
 btn.setClickable(true);
}
于 2013-09-17T23:54:24.810 に答える
2

これはandroid-bugと見なすことができます。クリックイベントはシステムによってキャッチされ、クリック可能なものを連続してクリックすると、提供が遅すぎる可能性があるというあなたの仮定は正しいです。booleanこのような値を挿入することで、この問題を回避することができます

private boolean handledClick = false;

public void onClick(View v){
    if (!handledClick){
        handledClick = true;
        startActivity(...);
    }
}

これにより、複数回トリガーされた場合でも、onClick内部のコードが1回だけ実行されるようになります...

于 2012-06-14T11:17:02.573 に答える
0

私も同様の問題を抱えていましたが、ボタンのonClick()button.setEnabled(false)を使用して、リスナーのコールバックメソッドでボタンを無効にすることができました。onResume()onRestart()およびボタンonWindowFocusChanged()のあるアクティビティのボタンを有効にします。

そして、これはユーザーがボタンを(継続的に)タップすることを禁止する方法の1つだと思います。

于 2012-06-14T11:15:39.987 に答える
0

goが必要なボタンを指す場合、

 go.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
    //    your code here
          go.setEnabled(false);
        }
    });

編集:それはまだ待ち行列にあるので、どうですか。

s.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {
            s.setEnabled(false);
            if(flag == 1){
                flag=0;
                //your code here
            }
        }
    });
于 2012-06-14T11:16:35.697 に答える
0

私も同じ問題を抱えていました、そしてこれは私がそれを解決した方法です:

int flag = 1;

 private OnClickListener btnNextActivity = new OnClickListener(){
    public void onClick(View v) {

            if(flag){
          Intent nextActivity = new Intent(getApplicationContext(),NextActivity.class);
          nextActivity.setClassName(". . .",". . ." );
          . . .
          startActivity(nextActivity);
          flag = 0;
            }

           else{
            Show Toast Message Here
              }
      }
};
于 2012-06-14T11:33:58.527 に答える
0
于 2016-01-28T06:43:22.437 に答える