Почему findViewById возвращает значение null на раздутом макете в robolectric-unit-test?

Я пытаюсь протестировать код с помощью Robolectric.

Мой код раздувает макет, а затем пытается получить представление, вызывая findViewById для этого макета. Инфляция макета работает нормально. Однако findViewById в этом макете всегда возвращает значение null.

В отладчике я вижу, что все (теневые) дочерние представления раздутого макета присутствуют и имеют свои атрибуты. Но идентификатор каждого ребенка установлен на 0. Почему? Я что-то упускаю?

Фактический код на устройстве или эмуляторе (без robolectric) работает нормально, но когда я пытаюсь запустить его с помощью robolectric, происходит сбой, как описано.

В основном мой код выглядит следующим образом:

LayoutInflater inflater = (LayoutInflater) Robolectric.application.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View layout = inflater.inflate(R.layout.timeline_list_item, null);
TextView view = (TextView) layout.findViewById(R.id.listItem_date);
//why is view null here!
view.setText("test");

С уважением Фрэнк


person Frank    schedule 25.01.2013    source источник
comment
как выглядит ваш макет xml?   -  person invertigo    schedule 25.01.2013


Ответы (2)


Спасибо, я нашел проблему.

Мой идентификатор ресурса R.id.listItem_date объявлен как @+id/listItem.date в моем XML-файле ресурсов.

Android, кажется, преобразует "." в имени на «_» в сгенерированном файле R. Это отлично работает при компиляции и запуске кода, но, видимо, у robolectric с этим проблемы.

Когда я меняю точку в имени своего ресурса на подчеркивание, мой код robolectric работает нормально.

Теперь, когда я знаю, что искать, я обнаружил, что для этого есть открытый билет на ошибку: https://github.com/pivotal/robolectric/issues/265

person Frank    schedule 27.01.2013

Пожалуйста, ознакомьтесь со следующими изменениями

LayoutInflater inflater = (LayoutInflater)**"ContextOnject"**.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View layout = inflater.inflate(R.layout.timeline_list_item, null);
person Swati    schedule 25.01.2013