Android runOnUiThread不会更新布局元素

时间:2016-04-10 15:39:13

标签: android

我的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。
无论如何,感谢大家的帮助。

2 个答案:

答案 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

中的文字