2017-08-28 1 views
1

Ich bin ein bisschen neu hier. Also im Grunde mache ich eine App, die die Restaurants in einem bestimmten Gebiet zeigt und in meinem XML-Code habe ich mehrere TextViews, die informieren, ob ein Restaurant offen oder in der Nähe ist.Wie man mehrere textViews zu einem bestimmten Tag und einer Stunde ändert, während die App läuft

Ich habe versucht, den aktuellen Tag und die Stunde in der onCreate-Methode zu erhalten und die textView (wie unten gezeigt) zu ändern.

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

Aber das ist nur das erste Mal, dass die App gestartet wird. Weiß jemand, was zu tun ist?

+0

Sie können eine Schaltfläche zum Aktualisieren hinzufügen, und wenn der Benutzer auf diese Schaltfläche klickt, überprüfen Sie die Zeit erneut und setzen Sie den entsprechenden Text. Oder Sie können auch Service oder Thread verwenden. –

+0

Danke für die schnelle Antwort. Ich möchte es automatisch, nicht manuell. Ich werde auf Threads und Dienste überprüfen! – mCalado

Antwort

1

Ok, nach ein bisschen Suchen und Suchen konnte ich eine Lösung finden, die mit meinem Code funktionierte. Hier geht es ein wenig Probe davon:

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

Und auf die onCreate Methode, die ich hinzugefügt:

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

Ich weiß nicht, ob dies ist der effektivste Weg, es zu tun, aber zumindest es funktioniert gut: D

0

Dies könnte wie eine Menge Arbeit auf dem UI-Thread für eine so einfache Aufgabe aussehen. Sie können einen Timer haben, der die TextView jede Sekunde aktualisiert. Dies könnte unnötiger Overhead für Ihren UInthread sein.

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 
} 

Und vergessen Sie nicht, diese Funktion in Ihrem onCreate() Funktion aufzurufen.

+0

In Ordnung, Mann, danke !! Ich werde deine Lösung versuchen. Irgendeine andere Suggestion? Ich denke, ich kann einen Zuhörer hinzufügen? (Nicht sicher). Aber ich denke, es wird die Dinge schneller machen – mCalado

+0

Ich werde Sie wissen lassen, wenn ich eine andere Lösung finde. Und wenn diese Lösung funktioniert, akzeptieren Sie sie, um anderen zu helfen, die das gleiche Problem haben. –

+0

Es hat tatsächlich nicht funktioniert. Die App stürzt einfach ab – mCalado

Verwandte Themen