我刚刚学习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
崩溃的解决方案,但似乎没有人解决这个问题。
答案 0 :(得分:0)
看看这个:Android: Accessing UI Element from timer thread
移植:您遇到错误,因为您尝试从单独的后台线程访问UI元素(在您的情况下为textView)。
另外,用最简单的例子来看这个答案:https://stackoverflow.com/a/6702767/2956344
答案 1 :(得分:0)
如果您在计时器运行中访问UI元素,则应使用Handler与runOnUIThread。
请检查:
http://developer.android.com/reference/android/app/Activity.html#runOnUiThread(java.lang.Runnable)
和
答案 2 :(得分:0)
您需要从text.setText(i + "");
runOnUiThread()