2016-01-21 4 views
0

Я хочу изменить содержимое TextView на результат вычисления в потоке, но сбой при выполнении. Вот мой код.Невозможно изменить интерфейс в runOnUiThread

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(). Когда вы передаете целочисленный тип, он выполняет поиск файла R (see : R) для ресурса строки с указанным идентификатором. Так как идентификатор не соответствует ни одному элементу вашего файла strings.xml, созданное исключение составляет ResourceNotFoundException.

Как сказал Сри, попробуйте код ниже, он гарантированно сработает.

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

В documentation он говорит setText(int resid).

Итак, значение int, которое вы передаете для этого метода, должно быть идентификатором ресурса (один из статического члена R.string). Это немного раздражает, но я думаю, Android Studio предупреждает вас об аннотации @ResourceId на prameter.

Если вы хотите установить текст в 5, вы должны сделать вызов метода String.valueOf(5), как это предлагается в комментариях.

Смежные вопросы