如何在应用处于 运行 时将多个 textView 更改为特定的日期和时间

How to change multiple textViews to a certain day and hour, while the app is running

我是新来的。 所以基本上,我正在制作一个应用程序来显示某个区域可用的餐厅,在我的 xml 代码中,我有多个 TextViews 通知餐厅是开门还是关门。

我尝试在 onCreate 方法中获取当前日期和时间并更改 textView(如下所示)。

TextView restaurant = (TextView) findViewById (R.id.openTag);
int hour = new Time (System.currentTimeMillis ()).getHour());
if (hour> = 14 && hour <= 19)
    restaurant.setText("OPEN");

但这只是应用程序第一次启动。有人知道怎么办吗?

对于如此简单的任务,UI 线程可能需要大量工作。 您可以有一个每秒更新 TextView 的计时器。对于您的 UI 线程,这可能是不必要的开销。

private void updateTextView() {
  Timer timer = new Timer();
  timer.schedule(new TimerTask() {
    @Override
    public void run() {
        // Your code goes here
        int hour = new Time (System.currentTimeMillis ()).getHour());
        if (hour> = 14 && hour <= 19)
          restaurant.setText("OPEN");
    }
  },0,1000); // Update TextView every second
}

并且不要忘记在您的 onCreate() 函数中调用此函数。

好的,经过一些尝试和搜索,我找到了一个适用于我的代码的解决方案。这是它的一个小例子:

private void updateTextView(ArrayList<Restaurant> restaurants, RestaurantAdapter itemsAdapter) {

                Date date = new Date();   // given date
                Calendar calendar = Calendar.getInstance(); // creates a new calendar instance
                calendar.setTime(date);   // assigns calendar to given date
                int day = calendar.get(Calendar.DAY_OF_WEEK);
                int hour = calendar.get(Calendar.HOUR_OF_DAY); // gets hour in 24h format
                int minutes = calendar.get(Calendar.MINUTE);        // gets hour in 12h format
                TextView title = (TextView) findViewById(R.id.openTag);
                if(hour>=21) {
                    restaurants.get(0).changeOpenTag("Closed");
                    itemsAdapter.notifyDataSetChanged();
                }
                if (hour>= 9 && hour <= 15) {
                    title.setText("Lunch");
                }
                else {
                    title.setText("Dinner");
                }
    }

并且在我添加的 onCreate 方法中:

Thread t = new Thread() {
            @Override
            public void run() {
                try {
                    while (!isInterrupted()) {
                        Thread.sleep(1000);
                        runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                updateTextView(restaurants, itemsAdapter);
                            }
                        });
                    }
                } catch (InterruptedException e) {
                }
            }
        };

        t.start();

我不知道这是否是最有效的方法,但至少它工作正常:D