有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java模拟单击按钮时的延迟

我有一个按钮,当这个按钮被点击时,我想做一些动作,然后把它们还原回来,比如说5秒钟。例如,单击按钮A时,文本A。文本被“点击”5秒,5秒后文本值应恢复到原始值。这就是我所拥有的,但我觉得这是完全错误的方式。不延迟的代码:

diff=time2-time1;

            while (diff<5000) {
                //Log.d("Timer is", String.valueOf(diff));
                time2=System.currentTimeMillis();
                diff=time2-time1;
            }

所以直到循环工作它的模拟延迟,然后我做我想要的。有什么建议吗


共 (6) 个答案

  1. # 1 楼答案

    使用Handler,类似这样:

    new Handler().postDelayed(new Runnable() {
        void run() {
            // do something later
        }
    }, 5000);
    

    编辑:请注意,此解决方案允许主线程在延迟期间继续运行——刷新GUI、正确处理活动更改(如“主页”按钮)等。使用Thread.sleep()则不会

  2. # 2 楼答案

    您可能希望将AsyncTasks作为一个容器来完成您的工作。此外,还可以调用线程。睡在里面。作业完成后,可以要求处理程序对象更改标题

    在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
            }
        };
    
  3. # 3 楼答案

    试试这个代码

    // 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)方法

  4. # 4 楼答案

    忙循环是个坏主意——它会把你的电池活活吃掉。也许^{}会更好

  5. # 5 楼答案

    你可以在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停止新单击,直到无法执行为止

  6. # 6 楼答案

    你有办法做到这一点:

    Thread.sleep(5000)
    

    它可能抛出一个中断异常,因此您必须捕获它