0

我写这里是因为我在Android Studio中有一个非常烦人的问题。 我的“应用程序”非常简单,一页有13个按钮;我想要的只是简单的:当我点击第13个按钮时,逐一更新前十二个按钮。 我想看看按钮更新每个之间有一点点间隔,但我不明白如何去做。 我在“onClick”方法中尝试了很多技巧,但我无法弄清楚如何解决它;我得到的是,经过一段时间(所得到的时间加起来,我把这个功能加入了各种“睡眠”),所有的按钮同时变成了彩色。 我把我的最后一次尝试,但如果你有任何其他的方式做到这一点,我愿意改变继续前进的方式。Android Studio:单击按钮时逐个更新多个按钮的背景

int[] buttonIDs = new int[] {R.id.button1, R.id.button2, R.id.button3, R.id.button4, R.id.button5, R.id.button6, R.id.button7, 
     R.id.button8, R.id.button9, R.id.button10, R.id.button11, R.id.button12 }; 
int currentI = 0; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    final Button goButton = (Button) findViewById(R.id.button13); 

    goButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      if (currentI < buttonIDs.length) { 
       Button b = (Button) findViewById(buttonIDs[currentI]); 
       b.setBackgroundColor(Color.parseColor("#FF22FF")); 
       currentI++; 

       try { 
        Thread.sleep(1000); 
       } catch (InterruptedException e) { 
        e.printStackTrace(); 
       } 

       Thread t = new Thread() { 
        public void run() { 
         goButton.performClick(); 
        } 
       }; 

       t.start(); 
      } 
     } 
    }); 

} 

这种尝试的结果是,第一个按钮变成彩色,然后我得到“应用程序已停止”错误的Android模拟器。

在此先感谢

+0

你不应该睡在UI线程上。这只会阻止用户界面回应。 –

+0

即使我将其删除,应用程序也会崩溃。除此之外,我需要一种方法让按钮一个接一个着色,因此我放了一个睡眠(我甚至试图在线程t的“运行”方法中放入“睡眠”,但它不会改变任何东西。 – Andrew1410

+0

UI线程负责对按钮进行树更改,通过睡眠UI线程可以阻止这些更改的生效,所以这绝对不是正确的解决方案,请参阅下面的两个答案以获得一些建议,它们都不是完整的,但希望他们会帮助你在正确的方向 –

回答

0

这里的基本想法是,你需要创建一个新的线程,这标志着UI线程更新每个按钮。在每次更新之间,新线程需要等到UI有机会执行更新。我对这种事情不是很有经验。你可能很可能用Handler来做这件事。可能会有更多的高级工具可以使用,但我不确定。

你绝对不想睡觉UI线程。这只会导致界面无响应。

1

使用此

final Handler handler = new Handler(); 
handler.postDelayed(new Runnable() { 
    @Override 
    public void run() { 
    //Do something after 1000ms 
    } 
}, 1000); 
+0

这似乎接近什么OP是寻找 –

+0

谢谢你,男人,它的工作!你救了我:) – Andrew1410