2017-08-28 3 views
1

私はちょっとここで新しいです。 だから、基本的には、レストランを特定の地域で利用できるようにするアプリを作っています。xmlコードでは、レストランが開いているか閉じているかを知らせる複数のTextViewがあります。複数のtextViewを特定の日時に変更するには、アプリケーションの実行中に

私は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

これで少し試して検索した結果、自分のコードで動作する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

関連する問題