android - 使用动态文本更新 UI

标签 android view android-activity textview

我希望每 5 秒更新一次屏幕上的文本,为此我创建了一个计时器。然而,在第一次更新之后,它再也不会更新盒子了。我假设我需要刷新 View 或其他东西,但我现在确定如何,有什么想法吗?

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);
           }
       }
   )
}

最佳答案

我会使用处理程序。

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);

例如,每 5000 毫秒“执行一次操作”。您可以通过将 WHAT 作为不同的整数传递并在 handleMessage 函数中处理它来使处理程序对不同的事件使用react。

编辑:我通常会将常量和处理程序作为成员放在类中,并将 regularHandler.sendEmptyMessageDelayed(...) 放在 onResume() 中{}

我也会把它放在 onPause() 中{}

regularHandler.removeMessages(WHAT)

Edit2:示例:

public class HomeActivity extends Activity implements OnClickListener {
    private static final int WHAT = 1;
    private static final int TIME_TO_WAIT = 5000;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        textTitle = (TextView) findViewById(R.id.textTitle);
        textArtist = (TextView) findViewById(R.id.textArtist);
    }

    @Override
    public void onResume() {
        super.onResume();
        regularHandler.sendEmptyMessageDelayed(WHAT, TIME_TO_WAIT);
    }

    @Override
    public void onPause() {
        super.onPause();
        regularHandler.removeMessages(WHAT);
    }

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

            regularHandler.sendEmptyMessageDelayed(msg.what, TIME_TO_WAIT);

             return true;
        }
    });
}

您需要在 onResume() 和 onPause() 中执行此操作,因为如果您不将其放在 onPause 中,则当您的 Activity 不在前台时,Handler 将继续循环。当循环回到前台时,您会希望循环再次启用(因此 onResume())。

关于android - 使用动态文本更新 UI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9539416/

相关文章:

android - 为 ListView 中的项目设置边距

Java Applet - MVC - 如何将模型绑定(bind)到 View ?

android - 在首选项屏幕中获取图像 URI!

java - 添加了一个选项菜单,现在进程停止

java - 到达时间选择器选择的时间后,如何自动删除我的 firebase 数据库中的整个帖子?

ruby-on-rails - 处理 Rails 中的遗留数据库 View

java - DialogFragment 保持全屏显示(不在对话框中)

android - 如何解决明显错误?

Android:用Greenrobot EventBus如何在2个Activity之间通信?

android - 使用 Intel XDK 构建的 Android 中的空白屏幕