使用android无法阻止多次点击按钮

时间:2015-04-24 07:25:24

标签: android android-asynctask

目前我正在制作一个简单的Android应用程序,我有一个问题,我已经停留了一段时间。我已经在google上阅读了很多关于如何使用android防止多次点击的文章,但是,当我按下按钮时,没有任何动作发生。 我想要做的就是阻止用户点击多次。我发布了示例代码。我想知道是否有一些错误...

private long mLastClickTime = 0;

public void sendData(View v) {

    if (SystemClock.elapsedRealtime() - mLastClickTime < 1000) {

        return;
    }
    mLastClickTime = SystemClock.elapsedRealtime();
    if ((number.getText().toString().equals("") || number.getText()
                .toString() == null)
                || (num.getText().toString().equals("") || num.getText()
                        .toString() == null)) {
        //alert the user
        Toast.makeText(this, "Insertnumber",Toast.LENGTH_SHORT).show();
    } else {

        if (SystemClock.elapsedRealtime() - mLastClickTime < 1000) {

            return;
        }
        mLastClickTime = SystemClock.elapsedRealtime();

        //sending the data
        trySendingData trying = new trySendingData();

        trying.execute();
    }
}

我想要做的是执行asyncTask trying.execute();只需点击一下。

5 个答案:

答案 0 :(得分:3)

您可以在onClickListener中调用此方法

 public static void blockView(final View v) {
    v.setEnabled(false);
    new Handler().postDelayed(new Runnable() {

        @Override
        public void run() {
            v.setEnabled(true);
        }
    }, 1000);

}

这将阻止视图1秒

答案 1 :(得分:0)

说完

Whateverbuttoncallssenddata.setEnabled(false);

Whateverbuttoncallssenddata.buttsetOnClickListener(null);

只要它不是文本视图。

答案 2 :(得分:0)

您可以在用户btnSendData.setEnabled(false)单击后禁用按钮单击,开始执行asynctask并执行任务。任务完成后,您可以启用按钮单击asynctask的onPostExecute()方法,或者您可以将结果返回到所需位置,并通过调用btnSendData.setEnabled(true)再次启用按钮单击

答案 3 :(得分:0)

实现这一目标有多种方法:

方法1:

设置标记。

创建像

这样的变量
button.setonclick...{
if (!isClicked){
isClicked = true;
//Write your AsynkTask here
}
}

一旦你的代码到达

button.setonclick...{
    button.setEnabled(false);
    //Write your AsynkTask here
    }
    }

方法2:

单击后禁用按钮 例如:

public void sendData(View v) {
v.setEnabled(false);
}

注意: 你正在从xml调用clcik动作。您需要像这样修改: 在这种方法下:

Component('ComposeLoading') {
  //fields
  date_time  'etd'

  //reference
  reference 'offerPlan', ref:'OfferPlan'

  //lists
  list 'loadings', ref:'Loading'
  list 'transportOrders', ref:'TransportOrder'
}

我认为第二个是你需要的。我添加方法1作为信息

答案 4 :(得分:0)

Piyush和SmulianJulian表示禁用点击,如果你启用它,那么在异步任务结束时启用它。像这样:

public void sendData(View v) {
//First disable button so user cannot click it immediately
  v.setEnable(false);

    if ((number.getText().toString().equals("") || number.getText() 
            .toString() == null) 
            || (num.getText().toString().equals("") || num.getText() 
                    .toString() == null)) { 
        //alert the user 
         Toast.makeText(this, "Insertnumber",Toast.LENGTH_SHORT).show();

  v.setEnable(true);//This makes view clickable 

   } else { 

     //sending the data 
        trySendingData trying = new trySendingData()

{
@Override
protected void onPostExecute(View result) {
    //This makes view clickable after completing your asyncTask trySendingData
v.setEnable(true);
        super.onPostExecute(result);
    }
    };
       trying.execute();
    } 
}