Подтвердить что ты не робот

Проверка Android-ожиданий "ожидаемого ресурса типа"?

Android Studio Beta (0.8) имеет отличную новую функцию, где он проверяет, что некоторые параметры int не являются произвольными целыми числами, а имеют некоторые свойства.

Например, вызывая что-то вроде:

setContentView(R.id.textView1);

будет правильно сообщать, что R.id.textView1 не является идентификатором макета (сообщение является "ожидаемым ресурсом макета типа" ). Есть и другие случаи, когда это переполнено.

Понятно, что эта защита теряется, как только вы добавляете свои собственные методы в микс, например.

private void mySetContentView(int resourceId) {
    setContentView(resourceId);
}

Затем я могу вызвать mySetContentView() с любым произвольным целым числом, и он не будет жаловаться.

Итак, у меня есть два (связанных) вопроса:

  • Как это достигается - специальные проверки, "запеченные" в линт?
  • Есть ли способ аннотировать метод mySetContentView(), чтобы он также сообщал об ошибке типа ресурса при вызове с недопустимым значением?
4b9b3361

Ответ 1

(Спасибо @CommonsWare за головы).

Существуют аннотации Java для поддержки этих проверок в вашем собственном коде. Все они могут быть найдены в пакете android.support.annotations:

  • IdRes
  • DrawableRes
  • LayoutRes
  • StringRes
  • & с

В этом случае, например, я мог бы использовать:

private void mySetContentView(@LayoutRes int resourceId) {
    setContentView(resourceId);
}

и Android Studio проверит, что предоставленный идентификатор ресурса действительно предназначен для макета.

Кроме того, эти аннотации экспортируются, поэтому они могут быть особенно полезны при разработке библиотеки.

Источники:

Ответ 2

Все это Аннотации:

@AnimatorRes
@AnimRes
@AnyRes
@ArrayRes
@AttrRes
@BoolRes
@ColorRes
@DimenRes
@DrawableRes
@FractionRes
@IdRes
@IntDef
@IntegerRes
@InterpolatorRes
@LayoutRes
@MenuRes
@NonNull
@Nullable
@PluralsRes
@RawRes
@StringDef
@StringRes
@StyleableRes
@StyleRes
@XmlRes

Ответ 3

Попробуйте этот ответ: его работа... Поместите этот код в свой build.gradle

android {
 lintOptions {
    disable "ResourceType"
  }
}

Ответ 4

Все аннотации, которые можно использовать с android.support.annotation, вы можете найти здесь.

И технический документ о поддержке аннотаций.