无法在runOnUiThread中更改UI

时间:2016-01-21 04:23:13

标签: android user-interface android-runonuithread

我希望将TextView内容更改为线程中的计算结果,但是在执行时会崩溃。这是我的代码。

new Thread(new Runnable() {
        public void run() {
            while (i < 5) {
               i++;
            }
            getActivity().runOnUiThread(new Runnable() {
                public void run() {
                    TextView txv = (TextView) getView().findViewById(R.id.txvone);
                    Log.d("123","i = "+ i);
                    txv.setText(i);//CRASH!!!
                }
            });
        }
}).start();

enter image description here

2 个答案:

答案 0 :(得分:2)

您需要将String类型传递给setText()方法。传递整数类型时,它会对Rsee : R)文件执行查找,以查找具有指定ID的字符串资源。由于ID与strings.xml文件中的任何项都不匹配,因此抛出的异常为ResourceNotFoundException

如同Sree所说,试试下面的代码,保证可以正常工作。

txv.setText(String.valueOf(i)));

答案 1 :(得分:0)

documentation中说setText(int resid)

因此,对于此方法传递的int值应该是资源ID(来自R.string静态成员的一个)。这有点烦人,但我认为,Android Studio会警告你有关参数的@ResourceId注释。

如果您要将文字设置为5,则应按照评论中的建议进行String.valueOf(5)方法调用。