只需按一下按钮,应用程序就会尝试将数据发送到服务器。如果连接处于活动状态,则会立即发送数据,但如果链接已关闭,则系统会尝试发送x秒。实际上,在那段时间内,界面(有意)被阻挡(按钮被点亮以突出显示当前操作)。问题是,如果用户开始按其他按钮,则会听到事件,当连接变为活动状态时,它会执行与这些事件相关的所有操作。
我该如何预防呢?
如何防止如何防止与其他按钮相关的每个事件被处理?
任何建议都将非常感激。
修改 我已经尝试在按下按钮时检查标志,不幸的是,当重新设置标志时,所有事件都被捕获并执行:
public void onClick(View v) {
switch(v.getId())
{
case R.id.button1: //when sendData() is trying to send the message, I don't want to that this code is executed
if(flagConf == 1)
{
...do something...
}
break;
case R.id.buttonConfirm:
if(myFlag == 1) //to avoid multiple touch of this button
{
...do something...
myFlag = 0;
sendData();
if(dataSent)
...do something...
else
...do something...
myFlag = 1; //I set this flag to 1 because, if message is not sent, the user have to re-pressed the buttonConfirm and try again
}
break;
}
}
在其他按钮监听器上:
由于
答案 0 :(得分:1)
您可以在处理数据时使用设置为boolean = true;
之类的标记。然后检查Button
onClick
public void onClick(View v)
{
if (!sending)
{
// do stuff
}
}
如果sending
为true
,则Button
将不执行任何操作。处理完数据或其他任何内容后,请务必将flag
设置回false
。完成后,您还可以使用buttonName.setEnabled(false); then back to
true`。
旁注:如果此操作需要很长时间(可能超过一两秒),我会反对不允许他们做任何事情,因为人们变得非常不耐烦的生物。没有人愿意坐下来看一个旋转的圆圈几秒钟。但是,如果您选择这样做,那么您可能希望显示一些消息,以便他们知道Buttons
无效的原因
答案 1 :(得分:1)
我有类似的问题。并且有一种很好的解决方法。
我与服务器的连接是通过扩展AsyncTask
的类完成的。这样,每次按下按钮,我都会检查任务是否正在运行。如果不是,它将生成一个新任务并执行该任务。
public void onClick(View v) {
if (updateThread == null){
updateThread = new UpdateThreadClass();
updateThread.execute();
}
}
然后创建AsyncTask,如:
public class UpdateThreadsClass extends AsyncTask<String, Void, Boolean> {
@Override
protected Boolean doInBackground(String... params) {
// Your code
}
@Override
protected void onPostExecute(final Boolean success) {
// Execute after completing the connection
}
}
将变量updateThread
声明为全局变量然后你的好处。
如果需要,您可以通过更改任务前后的可见性(XML
或.setVisibility(View.VISIBLE)
内的.setVisibility(View.Gone)
或onClick
)激活XML
上的进度条已完成,或者您也可以为按钮执行相同操作。
修改强>
您可以将进度条放在<ProgressBar
android:id="@+id/loading_screen"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:gravity="center_vertical|center_horizontal"
android:visibility="gone"/>
中,如下所示:
loadingScreen = (ProgressBar) findViewById(R.id.loading_screen)
然后点击按钮后,只需按{{1}}并设置可见性可见。