Android: программно setId выдает предупреждение Ожидаемый ресурс типа id

Я не знаю, почему это происходит:

Если я напишу следующий код:

TextView textView = new TextView(this);
textView.setId(1);

1 как id не работает и выдает мне предупреждение вроде:

Не работает в следующих значениях:

textView.setId(0+1);   // Valid
textView.setId(var++); // Valid even var=0

но не действует

textView.setId(1);     // Invalide

Кто-нибудь знает об этом? Кто-нибудь может объяснить это?

2 ответа

Это предупреждение генерируется Android Lint. Он проверяет, что вы используете правильный тип идентификатора в качестве идентификатора. Подпись для этой функции:

public void setId(@IdRes int id)

Итак, lint проверяет, что вы используете именно идентификатор типа @IdRes (см. аннотацию IdRes), а не @ColorRes или @StringRes (он проверяет, используете ли вы константы из класса R.id)

Используя выражения вроде 0+1 или же var++ (Кстати, результат на самом деле равен 0, а не 1) вы мешаете lint выводить тип аргумента.

Вы получаете предупреждение, потому что установка ваших собственных идентификаторов может быть опасной, например, вы можете установить тот же идентификатор, что и уже существующий элемент XML, это, очевидно, будет конфликтовать и вызывать проблемы. использование View.generateViewId() вместо этого, чтобы предотвратить это.

Другие вопросы по тегам