button.setText()和Thread.sleep()

时间:2017-06-09 19:49:41

标签: android multithreading settext thread-sleep

Noob问题正在进行中。在下面的代码中,我更新了Android中按钮的文本。然后我想等两秒钟,然后再次更新文本。如果我注释第二个b.setText(“发送数据”),睡眠后的那个 - 然后b.setText(“成功”)被写入按钮。如果我不评论那个,我永远不会在按钮上看到文字“成功”,只有“发送数据”。就像我有第二个b.setText(“发送数据”)时跳过Thread.sleep()。谷歌建议在setText(“成功”)之后添加一个计时器,以便setText()代码有时间在睡眠前执行。没有帮助。

    final Button b = (Button) findViewById(R.id.button);
            b.setText("Send data");

            b.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v)
            {
               b.setClickable(false);
               b.setText("Success");
               System.out.println("Debug before");

               try
               {
                 Thread.sleep(2000);
               }
               catch (Exception e)
               {

               }

               System.out.println("Debug after");
               b.setText("Send data");
               b.setClickable(true);
    }
    }); 

2 个答案:

答案 0 :(得分:2)

不要阻止你的主线程。请改用Handler.post

           b.setClickable(false);
           b.setText("Success");
           System.out.println("Debug before");

           new Handler().postDelayed(new Runnable(){
               System.out.println("Debug after");
               b.setText("Send data");
               b.setClickable(true);
           }, 2000);

答案 1 :(得分:0)

有很多方法可以做到这一点。 您可以运行新线程,然后更新视图。
或者:

     CountDownTimer countDownTimer = new CountDownTimer(2000, 1000) {
                public void onTick(long millisUntilFinished) {
                 //
                }

                public void onFinish() {
                   //update your view
                   System.out.println("Debug after");
                   b.setText("Send data");
                }
            };
            countDownTimer.start();