0

我目前正在开发一个android应用程序。它需要定期更新 textview 值。

例如,我想每秒将值增加 10。我尝试使用以下代码,但它不能正常工作:textview 仅在增量完成后更新

package com.example.stack1;

import android.os.Bundle;
import android.app.Activity;
import android.widget.TextView;

public class MainActivity extends Activity{
 /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

    }
    public void onResume(){
        super.onResume();
        TextView output=(TextView) findViewById(R.id.output);
        output.setText(String.valueOf(0));
        System.out.println(0);
        try {
            Thread.sleep(10000);
        } catch (InterruptedException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        output.setText(String.valueOf(10));
        System.out.println(10);
        try {
            Thread.sleep(10000);
        } catch (InterruptedException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        output.setText(String.valueOf(20));
        System.out.println(20);
    }
}

output是 main.xml 文件中的一个文本视图。此文件仅包含此对象。

注意 - textview 中的预期输出为“0”,10 秒后为“10”,20 秒后为“20”。但是,使用此代码,输出在 20 seconds 之前为空白,然后出现“20”。

4

1 回答 1

0

您可能希望使用诸如AlarmManager之类的东西,而不是sleep()assleep()将在睡眠期间停止进程中发生的所有事情。

它没有显示任何内容的原因是您正在onResume()方法中执行此操作。因此,当它加载显示时,在实际显示任何内容之前,它正在处理该方法以为用户设置内容。

所以,你想要的是:

  1. 加载值为 0 的显示
  2. 等待 10 秒
  3. 增加并显示给用户
  4. 等待 10 秒
  5. 增加并显示给用户

sleep()由于这些命令,您得到的是:

  1. 将值设置为 0
  2. 等待 10 秒
  3. 将值设置为 10
  4. 等待 10 秒
  5. 将值设置为 20
  6. 显示值

使用 AlarmManager,您可以在onResume()方法中初始化,显示加载,然后 AlarmManager 每十秒递增一次值。

于 2012-09-03T12:24:26.180 回答