2017-08-28 38 views
1

我在這裏有點新。 所以基本上,我正在製作一個應用程序,顯示在一定區域和我的xml代碼中可用的餐廳我有多個TextViews通知餐館是否打開或關閉。如何在應用程序運行時將多個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"); 

但這只是第一次啓動應用程序。有誰知道該怎麼辦?

+0

您可以添加一個刷新按鈕,當用戶單擊該按鈕時,重新檢查時間並根據此設置文本。或者你也可以使用服務或線程。 –

+0

感謝您的快速回答。我希望它是自動的,而不是手動的。我會檢查線程和服務! – mCalado

回答

1

好吧,經過一番嘗試和搜索後,我找到了一個可以與我的代碼一起工作的解決方案。這裏有雲的這一點樣品:

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

0

這可能看起來像一個簡單的任務在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()功能。

+0

好男人,謝謝!我會嘗試你的解決方案。任何其他的消化?我想我可以添加一個監聽器? (不確定)。但我認爲這會讓事情變得更快 – mCalado

+0

如果我找到其他解決方案,我會通知您。如果您發現此解決方案正常工作,請接受它以幫助其他遇到同樣問題的人。 –

+0

它實際上沒有工作。該應用程序只是簡單地崩潰 – mCalado

相關問題