0
    b.setOnClickListener(new OnClickListener()) {
    public void onClick(View arg0) {
        try{
         Thread.sleep(10000);
       }catch(Exception e){}
     }   
  });

上記のコードでは、Therad が機能するまで、これ以上 Button アクションを実行したくありません。現在、アプリケーションを何度も押すと、強制的に閉じるか待機するよう求められます。私はそれを望んでおらず、このボタンでこれ以上アクションを実行したくありません。

助けが必要。ありがとう

4

3 に答える 3

4

グローバルブール値を追加し、クリックするとtrueに設定されます。ボタンクリックで確認してください。設定されている場合は戻り、そうでない場合はスレッドを実行します。スレッドの最後に再度 false に設定します。

クリックされたブール値 = false;

b.setOnClickListener(new OnClickListener()) {
    public void onClick(View arg0) {
        if( clicked )
            return;
        try{
         clicked = true;
         Thread.sleep(10000);
       }catch(Exception e){}
     }   
  });

スリープから戻ったときに clicked = false に設定します。

于 2012-07-17T10:47:17.187 に答える
0

作業にはAsyncTaskを使用することをお勧めします。そして、あなたの要件に のget()方法を使用してください。AsyncTask

ボタンをクリックしてボタンexecute() AsyncTaskを無効にした後、AsyncTaskの完了時に戻り、結果でボタンを再度有効にするとしget()ますAsyncTask。したがって、アクティビティで Result回避できます。ANR

于 2012-07-17T10:49:06.593 に答える
0

前のクリックが処理されている間にそれ以降のクリックをブロックするには、少なくとも 2 つの方法があります。

1)最初にボタンを無効にし、最後に再度有効にしますonClick

b.setOnClickListener(new OnClickListener()) {
    public void onClick(View arg0) {
        b.setEnabled(false);

        //do your stuff

        b.setEnabled(true);
    }   
});

2)最初にフラグを設定onClickし、最後にクリアします:

(クラスレベル)

boolean isInOnClick = false;

その後

b.setOnClickListener(new OnClickListener()) {
    public void onClick(View arg0) {
        if(!isInOnClick) {
            isInOnClick = true;

            //do your stuff

            isInOnClick = false;
        }
    }   
});
于 2012-07-17T10:49:19.073 に答える