目前我正在制作一个简单的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();只需点击一下。
答案 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();
}
}