TextView.setText() сбой моего приложения
Я только изучаю Android, и у меня уже есть проблемы с основами:
Я хотел бы иметь таймер, который увеличивает TextView, но он падает в первый раз, когда таймер срабатывает.
Вот мой код:
public class Game extends Activity {
Timer timer = new Timer();
int i = 0;
TextView text;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_game);
text = (TextView) findViewById(R.id.timerText);
text.setText("0");
timer.schedule(new TimerTask() {
public void run() {
i++;
System.out.println(i);
text.setText(i + "");
if(i>100) timer.cancel();
}
}, 1000, 1000);
}
}
Вот мой XML:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
...
<TextView
android:id="@+id/timerText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="50dp"
android:text="Large Text"
android:textAppearance="?android:attr/textAppearanceLarge" />
</RelativeLayout>
Я нашел массу решений для setText
сбой, но никто из них, казалось, не исправил это.
3 ответа
Посмотрите на это: Android: доступ к элементу пользовательского интерфейса из потока таймера
Объяснение: у вас ошибка, потому что вы пытаетесь получить доступ к элементу пользовательского интерфейса (в вашем случае - textView) из отдельного фонового потока.
Также посмотрите этот ответ на упрощенном примере: /questions/21462125/tajmer-android-obnovlyaet-tekstovoe-predstavlenie-ui/21462158#21462158
Если вы получаете доступ к элементу пользовательского интерфейса при запуске таймера, вы должны использовать Handler или runOnUITheard.
Пожалуйста, проверьте:
http://developer.android.com/reference/android/app/Activity.html
а также
Android: доступ к элементу пользовательского интерфейса из потока таймера