Android-使用线程更新UI元素

时间:2015-05-29 13:46:59

标签: android android-studio

我有一个textview,我想用一个线程改变它并一次又一次地做(像数字时钟)。但我在2次更改之间设置时间时遇到问题。这里,代码:

display1 = (TextView) findViewById(R.id.textView1);

Thread timer2 = new Thread(){
        @Override
        public void run() {
            synchronized (this){

                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        int i = 0;
                        display1.setText("" + i);
                        try {
                            sleep(2000);
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                        display1.setText("" + (i+1));
                    }
                });
            }
        }
    };

    timer2.start();

这个睡眠(2000);函数使textview在给定时间内不可见,但我希望它保持不变直到下一次更改。我怎么能这样做?

3 个答案:

答案 0 :(得分:2)

  

但我在2次更改之间设置时间时遇到问题

不要在您的UI线程上执行sleep()。如果您希望将某些操作与延迟相关联,请将代码拆分为两个runnable,第一个应设置为display1,然后使用postDelayed()

延迟发布第二个runnable

修改

  

希望其中一个每秒增加3个,其他每个增加5个,直到达到1000为止

您可以自行制作Runnable帖子,直到满足某些条件(即时间,计数器值等)。最后,您的Runnable会检查您的条件,如果不满足,请致电postDelayed(this, delay);,您就是好人。

答案 1 :(得分:0)

您应该使用处理程序,并将更改分派给UI线程。

Handler mHandler = new Handler();

mHandler.post(new Runnable() {
    @Override
    public void run() {
        // Code to be run right away
    }
});

mHandler.postDelayed(new Runnable() {
    @Override
    public void run() {
        // Code to be run after 2 seconds
    }
}, 2000);

答案 2 :(得分:-1)

也许将你需要做的事分成不同的方法。这里有一个UI方法和一个睡眠方法分开。希望它有所帮助

object Foo { 
    def bar: Int = 5 
}