2017-02-21 5 views
6

Я использую butterknife в течение нескольких месяцев, и я только что заметил в своей документации, что он говорит:Android: Почему нам нужно использовать R2 вместо R с butterknife?

Теперь убедитесь, что вы используете R2 вместо R внутри всех НОЖ аннотаций.

Почему это? Я использую R, и все работает отлично.

+1

Я обнаружил, что значение ids в R2 для любых res (color, dimen, ...) такое же, как в R. только разница в R2 - это аннотация, подобная «@DrawableRes "и" @IdRes ", и использовал эту аннотацию, чтобы убедиться, что вы вернули правильный и ожидаемый тип. например, ожидается, что возвращаемое значение «@ColorRes» будет ссылкой на ресурс цвета, и ожидается, что возвращаемое значение «@DrawableRes» станет ссылочной ссылкой ресурса. – Sally

+0

@Sally Итак, вы говорите, что если я использую R2, я получу ошибки времени компиляции в случае, если я попытаюсь привязать идентификатор к неправильному типу? – TheCrafter

+0

Я исключил, что аннотации помогают нам улучшить проверку кода. Https://developer.android.com/studio/write/annotations.html – Sally

ответ

9

Использование R2 необходимо только для создания проектов библиотеки Android.

https://github.com/JakeWharton/butterknife#library-projects

Это связано с тем, что значения в R.java генерируемой класс не объявлен как «окончательный», когда построен как часть библиотеки. Аннотации, используемые для @BindView(), требуют, чтобы эти значения R. были окончательными и не подлежали изменению позже.

Я уверен, что кто-то может объяснить все это лучше, но нижняя строка - вы просто отлично используете «R.» значения в приложении @BindView в приложении Android

+0

Хорошо, я получил его сейчас. Благодаря! – TheCrafter

+0

Для получения более подробного объяснения у меня есть ответ здесь https://stackoverflow.com/questions/48577106/final-field-in-r2-java-in-butterknife/ – Debdeep