我的Android应用程序出现问题:
我正在尝试动态更新TextView中的文本,但UI没有任何变化。当我签入代码时(例如通过显示Toast或在调试器中)如果文本已经更改,它就会有,但GUI不会更新。
这是我的代码:
<TextView
android:id="@+id/textViewNick"
android:gravity="bottom|left"
android:layout_height="wrap_content"
android:layout_width="match_parent" />
public void changeNick(final String nick)
{
this.runOnUiThread(new Runnable()
{
@Override
public void run()
{
View view = View.inflate(MyApplication.getAppContext(), R.layout.activity_nick, null);
TextView textViewNick = (TextView) view.findViewById(R.id.textViewNick);
textViewNick.setText(nick);
}
});
}
从另一个类调用changeNick()
方法
有谁知道为什么会如此以及如何解决它?提前致谢。
修改
我发现changeNick()
方法是在活动onCreate()
之前调用的。我在onCreate()
中添加了一个标志作为最后一条指令,并在调用changeNick()
之前检查它,但它没有帮助,我仍然得到IllegalStateException“在onCreate()之前,活动不可用的系统服务”。
解决
changeNick()
方法在活动onCreate()
之前调用,因为我有两个不同的活动实例。我正在对尚未创建的那个执行`changeNick(),所以我得到了NullPointerException。
无论如何,感谢大家的帮助。
答案 0 :(得分:0)
这可能是我在尝试按时间点更新TextView
时遇到的同样问题,并且这样做有效,
public void changeNick(final String nick)
{
View view = View.inflate(MyApplication.getAppContext(), R.layout.activity_nick, null);
TextView textView = (TextView) view.findViewById(R.id.textViewNick);
new Thread(new Runnable() {
@Override
public void run() {
runOnUiThread(new Runnable() {
@Override
public void run() {
textView.setText(nick);
}
});
}
}).start();
}
答案 1 :(得分:-1)
只需使用以下行来设置文字:
textView.setText(nick);
无需更改UI-Thread