Android:View.getTag/setTag和IllegalArgumentException

Spa*_*ile 15 android

是的,我知道在调用需要密钥的这些函数的版本时需要一个唯一的资源ID,但我不能在我的生活中弄清楚如何创建可以这种方式使用的资源ID.我班上的最后一个变量不会工作,硬编码值也不会.两者都抛出了IllegalArgumentException.那么是什么,你如何使用这些方法?

Spara

Dim*_*rov 44

要创建资源ID,可以与您在XML(with @+id)中设置的资源ID相同,请添加

<resources>
    <item type="id" name="myId"/>
</resources>
Run Code Online (Sandbox Code Playgroud)

在XML中res/values/.

  • 例如:创建/res/values/ids.xml并导入you.package.R; (4认同)

Chr*_*Orr 14

来自Javadoc:

指定的键应该是在应用程序的资源声明的id ,以确保它是唯一的.

所以你不能只是组成值并将它们放在局部变量中.

您创建的每个资源,无论是字符串(R.string.*),布局(R.layout.*)还是个人View(R.id.*)都可以拥有ID.这是你必须要做的事情.

如果您确实需要针对单个对象存储多个对象View,则需要将R.id变量用作键,例如someView.setKey(R.id.my_key_1, someObject).

  • 另外,请注意我从核心Android团队那里得到了关于使用`getTag()`和`setTag()`的索引形式的抱怨.它们被设计为由库或其他可重用组件使用(它们不能盲目地调用常规`getTag()`/`setTag()`因为它们可能与代码的重用者冲突).如果你正在写这样的图书馆,那你就没事了.如果您正在编写一个普通的Android应用程序,请使用常规的非索引`getTag()`/`setTag()`方法,如果需要保存多个表单,只需使用某种形式的集合(例如``HashMap`)值. (17认同)
  • 使用索引版本的getTag()/ setTag()的正确方法是使用资源ID,如R.id. 不要使用R.string或R.layout作为键. (3认同)
  • @CommonsWare - 如果这是来自核心Android团队的此类投诉,如果它被添加到文档中会很棒. (2认同)