2016-12-22 2 views
0

Wie erhalte ich eine Beschriftung, um ein Integer-Label alle 5 Sekunden zu erhöhen, wenn eine Schaltfläche gedrückt wird. Ich habe versucht, es mit einer Timer-Funktion zu tun. Ich fühle mich wie ich hier bin. Momentan wird es nur von jeder Presse erhöht. Wenn ich den Erhöhungszähler Teil in die Timer-Klammern setze, stürzt die App ab. Bitte überprüfen Sie folgende Punkte aus:Taste gedrückt halten, Label-Integer jede Sekunde erhöhen, wie funktioniert das in Android?

button.setOnTouchListener(new View.OnTouchListener() { 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      switch(event.getAction()) { 
       case MotionEvent.ACTION_DOWN: 


        Timer t = new Timer(); 
        t.schedule(new TimerTask() { 
         @Override 
         public void run() { 
          count=count+1; 
          //app crashes if i insert the code here 
         } 
        }, 5000); 

        level= (TextView) findViewById(R.id.level); 
        level.setText(Integer.toString(count)); 

       case MotionEvent.ACTION_UP: 

        break; 
      } 
      return false; 
     } 
    }); 

Diese thread mir zu diesem Punkt geholfen, aber es stürzt die App auf diese Weise!

Antwort

0

Das ist, weil die Elemente nur von UiThread geändert werden können. Verwenden Sie Ihren Klassennamen anstelle von YOURCLASSNAME.

Timer t = new Timer(); 
    t.schedule(new TimerTask() { 
     @Override 
     public void run() { 
      count=count+1; 

      YOURCLASSNAME.this.runOnUiThread(new Runnable() { 
       @Override 
       public void run() { 
        level= (TextView) findViewById(R.id.level); 
        level.setText(Integer.toString(count)); 
       } 
      }); 
     } 
    }, 5000); 
0

können Sie verwenden Handler oder Timertask (mit runOnUiThread()):

Handler handler=new Handler(); 

handler.post(runnable); 
Runnable runnable=new Runnable(){ 
    @Override 
    public void run() { 
     //increment variable here. 
     handler.postDelayed(runnable, 5000); 
    } 
}; 
Verwandte Themen