【问题标题】:How to set a delay between setting texts in Android如何在Android中设置文本之间的延迟
【发布时间】:2018-07-25 15:54:18
【问题描述】:

如何在 bt.setText("№") 之间设置多个延迟?

    public void buttonOnClick (View button) {
    final Button bt = findViewById(R.id.button);
    bt.setText("3");
    //wait 1 second
    bt.setText("2");
    //wait 1 second
    bt.setText("1");
    //wait 1 second
    bt.setText("Click!");

【问题讨论】:

    标签: java android delay wait seconds


    【解决方案1】:

    由于您不能在 UI 线程上调用 Thread.sleep(只会显示最终结果),您应该在另一个线程上执行此操作,例如:

    关于构造函数:

    private Handler handler;
    public void onCreate(Bundle x) {
         //super and get bt
         final Button bt = findViewById(R.id.button);
         handler = new Handler() {
               public void handleMessage(Message msg) {
                    if(msg.what == 0)
                         bt.setText("Click!");
                    else
                         bt.setText(String.toString(msg.what));
               }
         }
    }
    
    public void buttonOnClick (View button) {
       final Button bt = findViewById(R.id.button);
       bt.setText("3");
       //wait 1 second
       handler.sendEmptyMessageDelayed(2, 1000);
       //wait 2 second
       handler.sendEmptyMessageDelayed(1, 2000);
       //wait 3 second
       handler.sendEmptyMessageDelayed(0, 1000);
       bt.setText("Click!");
    }
    

    请注意,我确实使用了 msg.what 那是这样的标识符,但您可以创建一个带有 obj 参数的消息,以便以后使用。

    【讨论】:

    • 您只需给出完整的答案。你不希望 OP 尝试一些东西。 OP 将如何学习?
    • 这是显示 Handler 机制仅省略 Message 构造函数部分的唯一方法,我发布的原因是其他人只会使用使用 Runnable 的 postDelayed,而 Handler 本身可以是大量消息。
    • 为什么味精是红色的?我是一个完整的 n00b (
    • 在哪里??是红色的吗?
    • Handler 被设计成一个队列消息的宿主。 Timer 对并发线程之间的消息传递没有帮助(在很长的路上),而 Handler 有帮助。
    【解决方案2】:

    Java 有 Timer 类,它可能会做你想做的事。 您可能希望使用 TimerTask 类来生成基本/空任务。 然后使用 Timer 运行任务。

    Baeldung Timer

    【讨论】:

      【解决方案3】:
      new CountDownTimer(4000, 1000){
      
         @Override
         public void onTick(long millisUntilFinished) {
             //change text
          }
      
         @Override
         public void onFinish() {
      
         }
      }.start();
      

      【讨论】:

        【解决方案4】:

        试试这个:

        使用postDelayed

         private static int SPLASH_TIME_OUT = 1000;
        
          if(bt.equal("3")){
                new Handler().postDelayed(new Runnable() {
        
                        @Override
                        public void run() {
        
                        // This method will be executed once the timer is over 
                        bt.setText("2");
                        }
                    }, SPLASH_TIME_OUT);  
               }
            ...
            //You can continue like that.
        

        【讨论】:

          【解决方案5】:

          使用RxJava,您可以高效地做到这一点。

          Observable.interval(1L, TimeUnit.SECONDS)
                   .take(2) // how many you want. if you want it infinite just delete this
                   .observeOn(AndroidSchedulers.mainThread())
                   .subscribeOn(Schedulers.io())
                   .subscribe((l) -> {
                         text.setText();//According to number
                   }, (t) -> {
                         //Handle Error
                   });
          

          【讨论】:

            猜你喜欢
            • 2013-03-30
            • 1970-01-01
            • 2017-09-17
            • 1970-01-01
            • 2012-06-09
            • 2023-03-13
            • 2013-07-26
            • 1970-01-01
            • 2011-05-11
            相关资源
            最近更新 更多