我有一个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在给定时间内不可见,但我希望它保持不变直到下一次更改。我怎么能这样做?
答案 0 :(得分:2)
但我在2次更改之间设置时间时遇到问题
不要在您的UI线程上执行sleep()
。如果您希望将某些操作与延迟相关联,请将代码拆分为两个runnable,第一个应设置为display1
,然后使用postDelayed()
修改强>
希望其中一个每秒增加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
}