Защо findViewById връща нула при раздуто оформление в robolectric-unit-test?

Опитвам се да тествам някакъв код с Robolectric.

Моят код раздува оформление и след това се опитва да извлече изглед чрез извикване на findViewById на това оформление. Раздуването на оформлението работи добре. Въпреки това findViewById на това оформление винаги връща нула.

Виждам в програмата за отстраняване на грешки, че всички (сенчести) дъщерни изгледи на раздутото оформление са там и имат зададени атрибути. Но идентификаторът на всяко дете е зададен на 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