Java 模拟单击按钮时的延迟
我有一个按钮,当这个按钮被点击时,我想做一些动作,然后把它们还原回来,比如说5秒钟。例如,当单击按钮A时,TextA.Text变为“单击”5秒,5秒后文本值应恢复为原始值。这就是我所拥有的,但我觉得这是完全错误的方式。不延迟的代码:Java 模拟单击按钮时的延迟,java,android,Java,Android,我有一个按钮,当这个按钮被点击时,我想做一些动作,然后把它们还原回来,比如说5秒钟。例如,当单击按钮A时,TextA.Text变为“单击”5秒,5秒后文本值应恢复为原始值。这就是我所拥有的,但我觉得这是完全错误的方式。不延迟的代码: diff=time2-time1; while (diff<5000) { //Log.d("Timer is", String.valueOf(diff)); time
diff=time2-time1;
while (diff<5000) {
//Log.d("Timer is", String.valueOf(diff));
time2=System.currentTimeMillis();
diff=time2-time1;
}
diff=time2-time1;
而(diff您有一种方法可以做到这一点:
Thread.sleep(5000)
它可能引发InterruptedException,因此您必须捕获它。您有一种方法可以做到这一点:
Thread.sleep(5000)
它可能会抛出InterruptedException,因此您必须捕获它。使用一个,类似以下内容:
new Handler().postDelayed(new Runnable() {
void run() {
// do something later
}
}, 5000);
编辑:请注意,此解决方案允许主线程在延迟期间继续-刷新GUI、正确处理活动更改(如“主页”按钮)等。使用thread.sleep()
不会。使用类似以下内容的
new Handler().postDelayed(new Runnable() {
void run() {
// do something later
}
}, 5000);
编辑:请注意,此解决方案允许主线程在延迟期间继续-使用thread.sleep()刷新GUI、正确处理活动更改(如“主页”按钮)等
没有。忙循环是个坏主意-它会把你的电池生吞活剥。也许会更好。忙循环是个坏主意-它会把你的电池生吞活剥。也许会更好。试试这个代码
// First save the current value of Textbox in a variable
String tmpVal = myEditText.getText();
// Now Setting of new Value for 2 seconds
myEditText.setText ( "Clicked" );
// Sleeping for 5 seconds
try
{
Thread.sleep(5000);
}
//Now Returning back to your old value
myEditText.setText ( tmpVal );
上面的所有代码都进入了public void onClick(视图v)
方法。试试这段代码
// First save the current value of Textbox in a variable
String tmpVal = myEditText.getText();
// Now Setting of new Value for 2 seconds
myEditText.setText ( "Clicked" );
// Sleeping for 5 seconds
try
{
Thread.sleep(5000);
}
//Now Returning back to your old value
myEditText.setText ( tmpVal );
以上所有代码都进入了
public void onClick(View v)
方法。您可能希望将AsyncTasks视为一个容器,在其中执行您的工作。此外,您可以在其中调用Thread.sleep。完成工作后,可以要求处理程序对象更改标题
在AsyncTask中执行此操作而不只是休眠主线程的原因是您的应用程序不会“冻结”。以下是如何使用它:
private class AsyncHttpRequest extends AsyncTask<Void, Void, Void>{
@Override
protected Void doInBackground(Void... params) {
Thread.sleep(5000);
return null;
}
@Override
protected void onPostExecute(Void result) {
_jobHandler.sendEmptyMessage(0);
}
}
protected Handler _jobHandler = new Handler() {
@Override
public void dispatchMessage(Message msg) {
// set the caption here
}
};
私有类AsyncHttpRequest扩展了AsyncTask{
@凌驾
受保护的Void doInBackground(Void…参数){
睡眠(5000);
返回null;
}
@凌驾
受保护的void onPostExecute(void结果){
_jobHandler.sendEmptyMessage(0);
}
}
受保护的处理程序_jobHandler=新处理程序(){
@凌驾
公共无效调度消息(消息消息消息){
//在这里设置标题
}
};
您可能希望将AsyncTasks视为执行工作的容器。此外,您可以在其中调用Thread.sleep。工作完成后,可以要求处理程序对象更改标题
在AsyncTask中执行此操作而不只是休眠主线程的原因是您的应用程序不会“冻结”。以下是如何使用它:
private class AsyncHttpRequest extends AsyncTask<Void, Void, Void>{
@Override
protected Void doInBackground(Void... params) {
Thread.sleep(5000);
return null;
}
@Override
protected void onPostExecute(Void result) {
_jobHandler.sendEmptyMessage(0);
}
}
protected Handler _jobHandler = new Handler() {
@Override
public void dispatchMessage(Message msg) {
// set the caption here
}
};
私有类AsyncHttpRequest扩展了AsyncTask{
@凌驾
受保护的Void doInBackground(Void…参数){
睡眠(5000);
返回null;
}
@凌驾
受保护的void onPostExecute(void结果){
_jobHandler.sendEmptyMessage(0);
}
}
受保护的处理程序_jobHandler=新处理程序(){
@凌驾
公共无效调度消息(消息消息消息){
//在这里设置标题
}
};
您可以在Onclick上获得视图,并可以使用
@Override
public void onClick(final View v) {
if(v.getId() == R.id.button1) {
if(isClikcalbe ){
isClikcalbe = false;
view.postDelayed(new Runnable() {
@Override
public void run() {
// you code
isClikcalbe = true;
}
}, 5000);
}
}
}
也可以使用bollean IsClickalBe停止新的单击,直到无法执行为止您可以在Onclick上获得视图,并可以使用
@Override
public void onClick(final View v) {
if(v.getId() == R.id.button1) {
if(isClikcalbe ){
isClikcalbe = false;
view.postDelayed(new Runnable() {
@Override
public void run() {
// you code
isClikcalbe = true;
}
}, 5000);
}
}
}
也可以使用bollean IsClickalBe停止新点击直到无法dangit你打败了我,我是gunna说xDdangit你打败了我,我是gunna说xD+1从文档判断,我认为这比
线程更好。睡眠
。很好。谢谢,这是我想要的。简单,就我的知识水平而言。这段代码有多高效?a当用户使用其他gui元素时,它是否会使线程意外停止?+1从文档中判断,我认为这比线程更好。睡眠
。很好。谢谢,这就是我想要的。很简单,就我的知识水平而言。这段代码有多高效?当用户使用h其他gui元素?我不知道这一点,我认为大多数答案将被视为答案。感谢这些信息,将来我会的。你可以回到你所有的老问题,并在那里接受最好的答案,而不仅仅是未来的问题!当然,我现在就做。我不知道这一点,我认为most答案将被评为答案。感谢您提供的这些信息,以后我会的。您可以回到您以前的所有问题,并在那里接受最好的答案,而不仅仅是未来的问题!当然,我现在就做。thread.sleep或使用上面评论中的处理程序哪个更好?根据您的回答年龄,Threa.Sleep会更好,因为您只有一个操作要执行。哪个更好,thread.Sleep,还是使用上述注释中的处理程序?根据您的使用情况,Threa.Sleep会更好,因为您只有一个操作要执行。