2016-01-21 30 views
0

我想要将TextView内容更改为线程中的计算结果,但执行时会崩溃。这是我的代码。无法在runOnUiThread中更改UI

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

你需要一个String类型传递给setText()方法。当您传递整数类型时,它将执行Rsee : R)文件查找具有指定标识的字符串资源。由于该ID与您的strings.xml文件中的任何项目都不匹配,所抛出的异常是ResourceNotFoundException

像Sree说的,试试下面的代码,它是有保证的工作。

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

documentation它说setText(int resid)

所以,你为这个方法传递的int值应该是一个资源id(一个来自R.string静态成员)。这有点令人讨厌,但我认为,Android Studio会在该参数中警告您关于@ResourceId的注释。

如果您希望将文本设置为5,则应按照注释中的建议执行String.valueOf(5)方法调用。