4

我不知道为什么会这样:

如果我编写以下代码:

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

1 as id 不起作用并给我一个警告,例如:

在此处输入图像描述

它不适用于以下值:

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

但无效

textView.setId(1);     // Invalide

有人知道吗?任何人都可以解释这件事吗?

4

2 回答 2

1

此警告由android lint生成。它会检查您是否使用正确类型的 ID 作为标识符。此函数的签名是:

public void setId(@IdRes int id)

因此,lint 检查您使用的正是类型的 id @IdRes(请参阅IdRes 注释),而不是@ColorRes@StringRes(它检查您使用的常量来自 class R.id

通过使用0+1var++(顺便说一句,它的结果实际上是 0 而不是 1)之类的表达式,您会妨碍 lint 推断参数类型。

于 2016-04-11T10:12:11.640 回答
0

您会收到警告,因为设置自己的 ID 可能很危险,例如,您可以设置与现有 xml 元素相同的 ID,这显然会发生冲突并导致问题。改为使用View.generateViewId()以防止这种情况发生。

于 2016-04-11T09:58:23.697 回答