2 znl 12 znl_12 于 2013.03.14 15:42 提问

使用动态文本更新 UI出现的问题

我想每5秒钟更新一次屏幕上的文本,就创建了一个 timer 计时器来实现。但是只有第一次更新了,以后再没更新。是不是我需要刷新视图或者使用别的方法?

public class HomeActivity extends Activity implements OnClickListener {
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        textTitle = (TextView) findViewById(R.id.textTitle);
        textArtist = (TextView) findViewById(R.id.textArtist);
        timedMeta();
}
static void timedMeta()
{
    timer.scheduleAtFixedRate(   
        new TimerTask() {
            public void run() {
                try{      
                    textTitle.setText(title);
                    textArtist.setText(artist); 
                    }
                Thread.sleep(UPDATE_INTERVAL);
                catch (Exception e) 
                { 
                },
                DELAY_INTERVAL,
                UPDATE_INTERVAL);
           }
       }
   )
}

3个回答

O_Casper_ne
O_Casper_ne   2013.03.14 16:32
已采纳

要使用一个 Handler.

private static final int WHAT = 1;
private static final int TIME_TO_WAIT = 5000;

Handler regularHandler = new Handler(new Handler.Callback() {
    public boolean handleMessage(Message msg) {
        // Do stuff

        regularHandler.sendEmptyMessageDelayed(msg.what, TIME_TO_WAIT);

        return true;
    }
});

regularHandler.sendEmptyMessageDelayed(WHAT, TIME_TO_WAIT);

onPause()

regularHandler.removeMessages(WHAT)
tangren03
tangren03   2013.03.16 18:22

你可以在activity中开一个线程,里面放个while循环,线程每sleep5秒就通过handler更新一次UI,记住,不能在activity的子线程中更新UI,否则会报错

oSanYeCao1234567
oSanYeCao1234567   Ds   Rxr 2016.07.27 21:20

子线程中是不能更新UI的,比如setText等,可以使用Handler在子线程中发送消息,然后在Handler中更新UI

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!