2013-10-27 5 views
0

О чем проблема на этой строке: timerText.setText(seconds);.Java for Android timer

public class ShowTimer extends Activity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.timer_test_xml); 

     Timer myTimer = new Timer(); 
     myTimer.schedule(new TimerTask() { 
      int seconds; 
      TextView timerText = (TextView) findViewById(R.id.TimerTestId); 
      @Override 
      public void run() { 
       seconds++; 
       timerText.setText(seconds); 
      } 
     }, 0, 1000); 

    }} 
+0

Параметр 'SetText (интермедиат)' функция на андроид не имеет документации, так что я действительно понятия не имею, что он делает. Вы уверены, что это функция, которую вы хотите вызвать? –

+0

Если мы поместим строку в качестве параметра метода, все еще не работает :) – user2837445

+0

Что вы хотите совершить и что на самом деле происходит? –

ответ

0

Я думаю, что вы хотите отобразить seconds в текстовом виде. Однако функция TextView.setText(int) этого не делает (Im фактически не уверен, что она делает). То, что вы хотите сделать, - это timerText.setText(""+seconds);, чтобы преобразовать параметр в строку и сменить вызов функции на другую перегруженную функцию.

0

seconds - int, тогда как я думаю, что вы хотите проходить как последовательность символов, или ссылку на одну через идентификатор ресурса, as per the documentation.

0

Хотя это не отвечает на исходный вопрос OP, есть альтернатива (и - если вы согласны с рекомендациями из документов Android - лучше), как это описано в this thread.

0

Как и в случае с предложением Ричарда, ваша другая проблема заключается в обновлении TextView в потоке, отличном от UI, поэтому рассмотрите использование обработчика .

Пример

public class ShowTimer extends Activity { 

    private Handler mHandler; 
    private TextView timerText = null; 
    private int seconds; 

    private Runnable timerRunnable = new Runnable() { 
     @Override 
     public void run() { 
      timerText.setText(String.valueOf(seconds++)); 
      mHandler.postDelayed(timerRunnable, 1000); 
     } 
    }; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.timer_test_xml); 

     mHandler = new Handler(); 

     timerText = (TextView) findViewById(R.id.TimerTestId); 
     timerRunnable.run(); 
    } 
}