【问题标题】:setBackgroundColor is getting ignoredsetBackgroundColor 被忽略
【发布时间】:2018-06-28 10:27:25
【问题描述】:
   layout.setBackgroundColor(Color.GREEN);
    try {
        Thread.sleep(1250);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
   layout.setBackgroundColor(Color.BLUE);

我想首先将布局的 BackgroundColor 更改为绿色,等待 1.25 秒后它应该变为蓝色。 BackgroundColor 在 1.25 秒后变为蓝色,但之前没有变为绿色。我该如何解决这个问题?

【问题讨论】:

    标签: java android android-handler thread-sleep


    【解决方案1】:

    您正在将导致问题的主线程(UI 线程)置于睡眠状态。

    试试这个

    layout.setBackgroundColor(Color.GREEN);
    layout.postDelayed(new Runnable() {
        @Override
        public void run() {
            layout.setBackgroundColor(Color.BLUE);
        }
    }, 1250);
    

    确保 layout 被声明为 final。

    【讨论】:

      【解决方案2】:

      您刚刚在上面两次更改了背景颜色。因此,它仅被视为您最后的 BLUE 颜色。

      你必须这样做。

      layout.setBackgroundColor(Color.GREEN);
      
       Handler handler = new Handler(); 
          handler.postDelayed(new Runnable() {
               @Override 
               public void run() { 
                    layout.setBackgroundColor(Color.BLUE);
               } 
          }, 1250); 
      

      【讨论】:

        【解决方案3】:

        尝试这样的处理程序:

        layout.setBackgroundColor(Color.GREEN);
         Handler h=new Handler();
                h.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        layout.setBackgroundColor(Color.BLUE);
        
                    }
                },1250);
        

        永远不要在 UI 线程上执行 Thread.sleep()

        这就是最初导致问题的原因。

        你可以用它来睡觉,例如。后台线程。

        这个 Handler 解决方案有两个优点

        (1) 避免第二个线程的系统开销,

        (2) 在 UI 线程上运行,因此可以进行 UI 更改而不会导致异常。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-09-26
          • 2016-06-05
          • 2014-02-25
          • 2011-05-09
          • 2015-02-08
          • 2011-03-27
          • 2010-11-19
          相关资源
          最近更新 更多