2014-05-10 3 views
-2

У меня есть текстовое представление в моей активности android, и я хочу передать его функции в другой класс java и изменить ее текст. Но это исключает меня. Я прочитал, что мне нужно запустить его в потоке пользовательского интерфейса или отправить в контекстную переменную, но я немного смущен, и я не мог этого сделать. Вот мой код:Передача и установка TextView из другого класса

класс таймера Java

public class CountdownTimer { 
static int duration; 
static Timer timer; 

public static void startTimer(final TextView TVtime) { 
    duration = 10; 

    timer = new Timer(); 
    timer.scheduleAtFixedRate(new TimerTask() { 

     public void run() { 
      TVtime.setText(setDuration()); 
     } 
    }, 1000, 1000); 
} 

private static String setDuration(){ 
    if(duration == 1) 
     timer.cancel(); 
    return String.valueOf(--duration); 
} 
} 

Android активность:

TVtime = (TextView) findViewById(R.id.textView_displayTime); 
CountdownTimer.startTimer(TVtime); 

ответ

1

Вы можете использовать android.os.Handler для этого:

public static void startTimer(final TextView TVtime) { 
    duration = 10; 

    final Handler handler = new Handler(){ 
     @Override 
     public void handleMessage(Message msg) { 
      TVtime.setText((String) msg.obj); 
     } 
    }; 

    timer = new Timer(); 
    timer.scheduleAtFixedRate(new TimerTask() { 

     public void run() { 
      Message msg = new Message(); 
      msg.obj = setDuration(); 
      handler.sendMessage(msg); 
     } 
    }, 1000, 1000); 
} 
2

Вы не можете обновить пользовательский интерфейс от не -UI Тема. Передайте activityContext методу startTimer().

public static void startTimer(final TextView TVtime,final Context activityContext) { 
    duration = 10; 

    timer = new Timer(); 
    timer.scheduleAtFixedRate(new TimerTask() { 

     public void run() { 
      ((Activity) activityContext).runOnUiThread(new Runnable() { 
       public void run() 
       { 
        TVtime.setText(setDuration()); 
       } 
      }); 
.......................... 
....................... 

Android активность:

TVtime = (TextView) findViewById(R.id.textView_displayTime); 
CountdownTimer.startTimer(TVtime, YourActivity.this); 
+0

почему-то говорит, что activityContext не метод runOnUiThread – Kickapoo

+0

забыл упомянуть, что. Вы должны отправить его в «Активность». См. Обновленный ответ. – JiTHiN

+0

Я не пробовал, но спасибо в любом случае, я использовал решение обработчика. Знаете ли вы какие-либо преимущества \ недостатки одного над другим? – Kickapoo

Смежные вопросы