【问题标题】:How to get Resource Name from Resource id如何从资源 id 获取资源名称
【发布时间】:2012-04-13 08:37:55
【问题描述】:


在我的布局中,我定义了这样的东西。

<RadioButton
    android:id="@+id/radio1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Dnt want this text" />

假设活动中的某个函数返回我这个 id(radioButton 的 id)。现在我想从这个 id 获取这个文本 radio1 。 简而言之,我想检索用android:id="@+id/radio1"

写的文本radio1

谁能告诉我这怎么可能?

【问题讨论】:

  • 说来话长.. 我需要从服务器接收的一些数据中将数据填充到大量的 editText 中。因此,我没有手动将数据设置到所有文本框,而是编写了一个可以为我工作的方法..为此我需要这个。

标签: android


【解决方案1】:

在你的活动中,试试这些:

  1. 得到像radio1这样的字符串:

    getResources().getResourceEntryName(int resid);
    
  2. 得到像com.sample.app:id/radio1这样的字符串:

    getResources().getResourceName(int resid);
    

现在在 Kotlin 中:

val name = v.context.resources.getResourceEntryName(v.id)

【讨论】:

  • 感谢您回答这个问题,我花了一个小时的大部分时间在谷歌上搜索这个问题 - 开发网站一直指向我 getString() - 这对这个毫无用处。
  • 知道getResourceEntryName(int resid)getResourceName(int resid) 之间有什么区别吗?
  • @JoshPinter 参考说:getResourceEntryName: 返回给定资源标识符的条目名称 getResourceName: 返回给定资源标识符的全名.该名称是“package:type/entry”形式的单个字符串,差异似乎在于为 getResourceName 添加的 package:type
  • @Shubhayu - 你如何在浓缩咖啡测试中做到这一点? getResources() 函数似乎不可用!
  • 如果你使用 Proguard (minifyEnabled true),我不建议使用它,尤其是getResources().getIdentifier(...
【解决方案2】:

您有 id('long' type) 来自您想要访问单选按钮 id(name) 的 id,即 radio1。 你用这个

getResources().getResourceEntryName(id);

在上面使用中,您可以获得单选按钮的名称,即radio1。这里 参数 id 是你拥有的(长类型)。 试试这个,它会 100% 帮助你。

【讨论】:

  • 谢谢。很高兴有人真正回答了这个问题,而不是通常的“你为什么需要那个 [noob]”的回答。在我迭代它们时拥有元素的名称对于调试是无价的。我的意思是,真的,我将如何找到 ID 为 354814715 的 TextView? (如果我没记错的话,这在编译之间甚至不是常数) - 不知道为什么 OP 需要它,但我需要它来验证我的字体缩放功能实际上是在迭代所有子元素。
【解决方案3】:

科特林:

val name = v.context.resources.getResourceEntryName(v.id)

【讨论】:

  • 也许你可以添加更多关于这解决了什么问题以及它是如何解决的信息:)
  • @PhilippMeissner 这一切都很明显
  • 让我们同意不同意。
【解决方案4】:

如果我是对的,您想要检索的是单词“radio1”(来自 id 本身?)所以如果是这种情况,那么首先您需要获取它的 id。

int intname= buttonname.getId();

然后得到它的结果

String stringname= getResources().getResourceEntryName(intname);

希望能帮到你

【讨论】:

    【解决方案5】:

    你的意思是要取id的字符串文本?

    既然你已经定义了它,你应该知道这是什么。

    如果你有一个布局,你想查找一个View是否有特定的id,你可以遍历整个布局,用getId()检查,如果每个View的id就是你要找的id..

    希望这会有所帮助(如果我理解正确你的问题.. :))

    【讨论】:

    • 不,你完全错了。我想从 android:id="@+id/radio1" 检索文本 radio1
    • 文本 radio1 是您的视图的 ID。它不是一个简单的文本,你可以获取、拆分等。为了更好地帮助你,你能告诉我们你到底需要这个文本做什么吗?
    • @DimitrisMakris:说来话长……我需要从服务器接收的一些数据中将数据填充到大量的 editText 中。因此,我没有手动将数据设置到所有文本框,而是编写了一个可以为我工作的方法..为此我需要这个
    • 因此,如果您有 10 个响应,例如您想要填充 10 个单选按钮的字符串,我认为解决方案可能是动态创建这些单选按钮并设置它们的值。另一种方法是使用带有单选按钮的 ListView 作为列表项,当然这符合您对布局的需求。
    • 感谢您的回复。但是你搞错了,我有 10 个编辑框,我收到了 json 字符串,在这个字符串被解析后,我将值填充到这 10 个编辑框中,它被转换为 HashMap。现在改为手动将每个值(对应于 hashmap 的键)映射到 editText 文本。我正在编写一个可以为我工作的方法。
    猜你喜欢
    • 2015-10-09
    • 2011-03-29
    • 1970-01-01
    • 2020-01-24
    • 2015-01-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多