2010-12-29 6 views
0

Für mein Projekt, ich versuche, eine Methode alle 10 Sekunden, wenn ich auf eine Schaltfläche "A" klicken und es sollte aufhören, wenn ich den Knopf erneut (Art von on/off) klicken.Android Thread Button Schlaf

das ist, was ich erreicht: - /:

ButtonA.setOnClickListener(new OnClickListener() {    
      @Override 
      public void onClick(View v) {    

         Handler handler = new Handler(); 
        handler.postDelayed(new Runnable() { 
         public void run() { 
          showCurrentLocation(); 
           Methodexecute(); 

         } 
        }, 10000); 
       } 

        } 
     }); 

Wie kann ich diese Methode wiederholen Ausführung alle 10 Sekunden, bis die Taste erneut gedrückt wird?

dank

Antwort

1

Betrachten wir ein Timer mit einer Timertask verwendet wird, es alle 10 Sekunden planen. Ich hoffe, dass dies funktionieren wird:

Timer timer = new Timer(); 
    TimerTask task = new TimerTask() { 

     @Override 
     public void run() { 
      //insert your methods here 
     } 
    }; 

    boolean taskIsRunning = false; 
    if(taskIsRunning){ 
     timer.cancel(); 
     taskIsRunning = false; 
    } else {    
     timer.schedule(task, 0, 10000); 
     taskIsRunning = true; 
    } 
+0

können Sie es bitte mehr erklären, thx – user557475

+0

sehe meine bearbeitete Antwort. –

+0

hat es nicht funktioniert: ( – user557475

0

In Ihrem onClick Methode Sie auch die Timer-Task wie so hin- und herschalten:

... 
@Override public void onClick(View v) { 
    ... 
    toggleTask(); 
    ... 
} 
... 

und dann, von Jonathans Code, so etwas wie

boolean taskIsRunning = false; 
Timer timer; 
TimerTask task = new TimerTask() { 
    @Override 
    public void run() { 
     //insert your methods here 
    } 
}; 
private void toggleTask() { 
    if(taskIsRunning){ 
     timer.cancel(); 
     taskIsRunning = false; 
    } else { 
     timer = new Timer()   
     timer.schedule(task, 0, 10000); 
     taskIsRunning = true; 
    } 
} 
+0

danke, aber wenn ich den Timer abbrechen, erhalte ich einen Fehler, wenn ich ihn neu starte:/ – user557475

+0

Ah ... ja Es sieht so aus, als müssten Sie eine neue Instanz erstellen, nachdem Sie sie abgebrochen haben. Ich habe den obigen Code bearbeitet. Siehe http://developer.android.com/reference/java/util/Timer.html#cancel() für Referenz. – tnunamak

1
handler = new Handler(); 
ButtonA.setOnClickListener(new OnClickListener() { 
    @Override public void onClick(View v) { 

      handler.postDelayed(new Runnable() { 
       public void run() { 
        if(taskIsRunning){ 
         showCurrentLocation(); 
         Methodexecute(); 
         handler.postDelayed(this,10000); 
        } 
       } 
      }, 10000); 
     } 
    } 
});