使用@StyleableRes注释的obtainStyledAttributes。抑制警告。

7

在查看这里的答案时,我遇到了以下行的问题:

TypedArray ta = obtainStyledAttributes(R.style.MyCustomStyle, attrs);

似乎Android Studio不允许我传递一个非R.styleable资源的整数而不受警告。它告诉我它希望一个类型为styleable的资源,我认为这意味着我正在调用的代码已经使用了@StyleableRes注释

Expected resource of type styleable

读取R.style.{x}中定义的值最好的方法是什么?链接帖子中的被接受的答案有效并且可以编译,但我不知道如何抑制警告。因为有一个警告,所以抑制它安全吗?如果可以,该怎么做?


styleable 不是 style - Blackbelt
@blackbelt 正确。这就是为什么我感到困惑的原因,我链接的问题中被接受(悬赏!)的答案使用了一种风格,并且有很多赞。 - Ben Pearson
实际上这只是一个警告,你运行了你的代码吗? - pskink
代码编译成功。目前,我正在使用 @SuppressWarnings("all"),但这并不理想。我想在代码中明确表示“我知道这个警告,可以忽略它”,但仅针对 obtainStyledAttributes 上的那一个调用。我可以创建一个只包含该行的方法来提取 TypedArray 并注释该方法,但这似乎是一个变通方法。 - Ben Pearson
2个回答

9

我认为抑制这个的正确方法是:

@SuppressWarnings("ResourceType")

当我按下Alt-Enter来获取警告的修复选项并选择"常量和资源类型不匹配"检查选项 > "为类抑制"时,我会收到此提示(如下图所示)enter image description here。这对我有用。
由于你引用的代码可能是很久之前编写的,所以这个检查的ID可能已经发生了改变;我浏览了提交日志,但没有找到相关的参考。

谢谢你的回答。我现在已经抑制了那个特定的警告。静音警告是否安全(我猜这个警告是有原因的)? - Ben Pearson
你可能不想一直在所有地方将其静音。尽管存在这个错误,但它确实标记了一个易于制造但难以诊断的编程错误。 - Scott Barta
将抑制设置为方法就足够安全了,不需要将其应用于整个类。 - Maher Abuthraa

1

您可以使用@SuppressWarnings("ResourceType")来抑制方法中的警告检查,或者您可以在该行代码之前使用//noinspection ResourceType来避免仅在该行代码中进行检查。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接