0
Timer t = new Timer();
t.scheduleAtFixedRate(new TimerTask() {
    public void run() {
    // TODO Auto-generated method stub
    Log.i("first iteration","first iteration");
    btn1.setTextColor(Color.rgb((int)(Math.random()*255), (int)(Math.random()*255), (int)(Math.random()*255))); 
    Log.i("iterating","iteratinggggggggg"); 
                        }
                    }, 0, 1000);

在 Logcat 中:

01-07 02:39:09.789: I/first iteration(16568): first iteration
01-07 02:39:09.789: I/iterating(16568): iteratinggggggggg
01-07 02:39:10.781: I/first iteration(16568): first iteration

这意味着它只btn1.setTextColor(...)执行一次!我希望每1 秒更改一次按钮文本

有高手可以帮忙吗?

感谢 Ole,我可以找到我想与您分享的问题的解决方案:

解决方案:

// UPDATING BTN TEXT DYNAMICALLY
    Runnable myRunnableUpdater = new Runnable()
    { 
        public void run() {
            colorGenerator();
            hd.postDelayed(myRunnableUpdater, 1000);
        }
    };
    void startRepeatingTask()
    {
        myRunnableUpdater.run(); 
    }
    void stopRepeatingTask()
    {
        hd.removeCallbacks(myRunnableUpdater);
    }

    private void colorGenerator() {
        btn1.setTextColor(Color.rgb((int)(Math.random()*255), (int)(Math.random()*255), (int)(Math.random()*255)));
    }
    //END OF UPDATING BTN TEXT DYNAMICALLY!!

1)不要忘记声明Handler hd
2)此外,hd = new Handler()onCreate()
3)中,startRepeatingTask()在您希望重复代码的任何地方使用。
4)stopRepeatingTask()在您希望停止重复的任何地方使用。

干杯! ;)

4

1 回答 1

1

您的应用程序正在强制关闭,因为您正试图从由Timer. 只允许主线程更新 UI。这可以使用Handler

看看这个关于如何实现这个的答案。

于 2013-01-07T01:03:07.733 回答