2013-07-02 3 views
1

У меня есть класс, который реализует несколько кнопок и счетчиков, когда я нажимаю кнопку. Мне нужно, чтобы какой-то текст в TextView был настроен на что-то еще. Это не сумасшествие, поэтому я не понимаю, почему это не работает.TextView.setText() работает над нажатием кнопки, но не с CountDownTimer

Кнопка метод OnClick, который работает:

public class Main extends Activity{ 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 

     LinearLayout linLayout = (LinearLayout)findViewById(R.id.main_view); 

     Button button_2 = new Button(this); 
     button_2.setText("2"); 
     button_2.setOnClickListener(new View.OnClickListener(){ 
      public void onClick(View v){ 
       setValues(2, 2); 
       ((TextView)findViewById(R.id.counter_label)).setText("You Pressed 2"); 
       updateScrollText(); 
       startTimer(200000); 
      } 
     } 
     linLayout.addView(button_2); 
    } 


    public void setValues(int first, int second); 
     this.first = first; 
     this.second = second; 
    } 
... 

Но когда я пытаюсь поместить его в мой таймер:

private void startTimer(long time){ 
    counter = new CountDownTimer(time, 1000){ 
     public void onTick(long millisUntilDone){ 

      Log.d("counter_label", "Counter text should be changed"); 
      ((TextView)findViewById(R.id.counter_label)).setText("You have " + millisUntilDone + "ms");      
     } 

     public void onFinish() { 
      ((TextView)findViewById(R.id.counter_label)).setText("DONE!"); 

     } 
    }.start(); 
} 

расстраивает часть является то, что LogCat показывает «Встречное текст должен быть изменен «на каждом тике, как это предполагается, он просто не меняет текст. Вы знаете, что происходит? Я очистил проект, и все остальное работает так, как должно.

Я также заметил, что другой счетчик таймера, который делает подобную вещь (показывая мне время, пока это не будет сделано), работает на 100%, я не коснулся его, и теперь он не устанавливает текст. Он перестает изменять текст через 1 секунду, но счетчик продолжает отсчет.

+0

опубликовать полный код. – Raghunandan

+0

Обновлено, это действительно ОЧЕНЬ просто. Я не включил полный код для пробелов, есть еще несколько кнопок, которые все работают, и все они настроены точно так же. Другой таймер выполняется точно так же, как раз в startTimerTwo, и выполняется при нажатии другой кнопки. Все работает отлично, просто не обновляя текст непрерывно. – zgc7009

ответ

1

Возможно, ваш таймер не работает в потоке пользовательского интерфейса, но только пользовательский интерфейс может работать с пользовательским интерфейсом. Просто оберните вас SetText следующим образом (при условии, что вы в деятельности):

runOnUiThread(new Runnable() { 

     @Override 
     public void run() { 
      ((TextView)findViewById(R.id.counter_label)).setText("You have " + millisUntilDone + "ms"); 
     } 
}); 
+1

Не повезло, но оцененный ответ. – zgc7009

+0

@ zgc7009 разместите свой полный код. – Raghunandan

+0

@ zgc7009 Я удивлен, что ваш код даже работает. Потому что вы не задали контент для активности. – Raghunandan

1

Я взят код размещен, модифицировал его немного, и я должен сказать, что это работает для меня. Проверьте это:

public class MainActivity extends Activity { 

TextView tvCountdown; 
Button btnCountdownStarter; 

int mFirst; 
int mSecond; 

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

    tvCountdown = (TextView) findViewById(R.id.tvCountdown); 
    tvCountdown.setText("timer"); 

    btnCountdownStarter = (Button) findViewById(R.id.btnCountdownStarter); 
    btnCountdownStarter.setText("button"); 
    btnCountdownStarter.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v){ 
      setValues(2, 2); 

      tvCountdown.setText("You pressed 2"); 

      startTimer(20*1000); 
     } 
    });  

    } 

    public void setValues(int first, int second) { 
     mFirst = first; 
     mSecond = second; 
    } 


    private void startTimer(long time) { 
     new CountDownTimer(time, 1*1000) { 
      public void onTick(long millisUntilFinished) { 
       tvCountdown.setText("seconds remaining: " + millisUntilFinished/1000);     
      } 

      public void onFinish() { 
       tvCountdown.setText("done!"); 
      } 
     }.start(); 
} 

}

Единственное, что я модифицирована создавал два представления в XML-файле, но не в OnCreate метод. activity_main файл:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:paddingBottom="@dimen/activity_vertical_margin" 
android:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin" 
tools:context=".MainActivity" > 

<TextView 
    android:id="@+id/tvCountdown" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" /> 

<Button 
    android:id="@+id/btnCountdownStarter" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_below="@+id/tvCountdown" /> 

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