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()
вместо этого, чтобы предотвратить это.