Android Studio:单击按钮时一一更新多个按钮的背景

Posted

技术标签:

【中文标题】Android Studio:单击按钮时一一更新多个按钮的背景【英文标题】:Android Studio: Updating multiple buttons' backgrounds one by one when clicking a button 【发布时间】:2017-09-11 20:28:53 【问题描述】:

我写在这里是因为我在 android Studio 中有一个非常烦人的问题。 我的“应用程序”非常简单,一页有 13 个按钮;我想要的很简单:当我单击第 13 个按钮时,一个一个地更新前十二个按钮。 我希望看到按钮在每个按钮之间有一点间隔更新,但我不明白该怎么做。 我在“onClick”方法中尝试了很多技巧,但我不知道如何解决它;我得到的是,经过一段时间(获得的时间将我放入函数中的各种“睡眠”加起来)所有按钮同时变为彩色。 我进行了最后一次尝试,但如果您有任何其他方式可以做到这一点,我愿意改变方式继续进行。

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 模拟器上收到“应用程序已停止”错误。

提前致谢

【问题讨论】:

你不应该睡在 UI 线程上。这只会阻止 UI 响应。 即使我删除它,应用程序也会崩溃。此外,我需要一种方法来逐个着色按钮,因此我设置了睡眠(我什至尝试将“睡眠”放在线程 t 的“运行”方法中,但它不会改变任何东西。 UI 线程负责对按钮进行树形更改。通过休眠 UI 线程,您将阻止这些更改生效。所以这绝对不是正确的解决方案。有关一些建议,请参阅下面的两个答案。两者都不完整,但希望它们能帮助您朝着正确的方向前进。 【参考方案1】:

使用这个

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

【讨论】:

这似乎接近 OP 正在寻找的内容。【参考方案2】:

这里的基本思想是您需要创建一个新线程,该线程向 UI 线程发出信号以更新每个按钮。在每次更新之间,新线程需要等待,直到 UI 有机会执行更新。我对这种事情不是很有经验。您很可能使用 Handler 来执行此操作。您可能可以使用更多高级工具,但我不确定。

您绝对不想让 UI 线程休眠。这只会导致 UI 变得无响应。

【讨论】:

以上是关于Android Studio:单击按钮时一一更新多个按钮的背景的主要内容,如果未能解决你的问题,请参考以下文章

Android Studio 按钮导致崩溃

Android Studio 3.1.2运行按钮不起作用

如何在单击按钮的 Android Studio 上发送邮件?

在android studio中单击按钮时无法查看当前坐标

通过单击 Android Studio 中的按钮在 webview 中获取随机 Youtube 视频

如何单击图像按钮并将其显示在 Android Studio 的新页面中?