我想使用textview显示字母。并且字母应在一段时间间隔后显示在textview中。
我使用以下代码......
String a="Apple";
String b="";
.......
.......
public void run() {
for (int i = 0; i < 5; i++) {
b=b+""+a.charAt(i);
mTextView.setText(b); //Problem here
Log.d("Letters",""+b);
try {
sleep(2000);
} catch (InterruptedException e) {}
}
Log cat结果:
android.view.ViewRoot $ CalledFromWrongThreadException:只有创建视图层次结构的原始线程才能触及其视图。
任何解决方案?
答案 0 :(得分:2)
您无法更新线程中的textview,因为UI更新不是线程安全的。
使用此
public void run() {
for (int i = 0; i < 5; i++) {
b=b+""+a.charAt(i);
Log.d("Letters",""+b);
try {
sleep(2000);
handler.post(updateMessgae)
} catch (InterruptedException e) {}
}
private final Runnable updateMessgae= new Runnable()
{
public void run()
{
try
{
Log.d("Letters",""+b);
}
catch (Exception e)
{
e.printStackTrace();
}
}
};
private final Handler handler = new Handler();
答案 1 :(得分:2)
您无法从其他线程更改UI控件。以下一种方式更新您的代码:
public void run() {
for (int i = 0; i < 5; i++) {
b=b+""+a.charAt(i);
//one of the ways to update UI controls from non-UI thread.
runOnUiThread(new Runnable()
{
@Override
public void run()
{
mTextView.setText(b); //no problems here :)
}
});
Log.d("Letters",""+b);
try {
sleep(2000);
} catch (InterruptedException e) {}
}
}