【问题标题】:Are resources final in Android?Android中的资源是最终的吗?
【发布时间】:2023-03-15 15:33:01
【问题描述】:

http://tools.android.com/tips/non-constant-fields 中所述,资源 ID 不是最终的(在 ADT 14 中)。因此,使用 switch 的检查被破坏(参见:Android resource IDs suddenly not final, switch()'es broken)。 但是打开 R.java 后,您可以看到有 final 资源。 那么,使用什么 - ifswitch?哪些版本的 SDK 需要 if 语句? 如果我写,Lint 不会发出警报

switch (v.getId()) {
    case R.id.llBirthday:
        ...
        break;
    case R.id.llCity:
        ...
        break;
}

【问题讨论】:

  • 两者都可以,我想这是一个偏好问题。当您引用 R.id.SomeId 时,您指的是 R,并且 R 是在您编译应用程序时生成的,因此它应该始终有效。谷歌已经练习了一段时间了。为了安全起见,我总是使用 if,因为大小写取决于原始 int

标签: android


【解决方案1】:

id 被转换为唯一的整数值,并且通过打开 R.id.myvalue 的值,该 int 值将始终映射到该资源。

链接的问题来自 2011 年。

对于ifswitch,如果您只有几个值,那么 if 语句可能会更好,更长的列表然后是 switch,这是编程基础。请注意,这不是一成不变的。 When to use If-else if-else over switch statments and vice versa

【讨论】:

  • 谢谢你,伊薇特女士,我明白了。所以,我认为,2011 年的 Google 更改现已弃用,我们可以使用 switch
【解决方案2】:

我们可以同时使用if elseswitch,两者都可以。当您使用 R.id.yourResource 时,它将转换为 int 这就是 if elseswitch 都可以工作的原因。

【讨论】:

  • 我同意你的看法。我担心如果使用 switch,应用程序在某些情况下可能会失败。但是谷歌在R.java中恢复了final,所以又没问题了。
猜你喜欢
  • 2011-12-12
  • 1970-01-01
  • 1970-01-01
  • 2015-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多