如何从资源ID获取资源名称


158


在我的布局中,我已经定义了这样的内容。

<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。简而言之,我想检索写入的文字radio1android:id="@+id/radio1"

有人可以告诉我这怎么可能吗?


长话短说..我需要从服务器接收的一些数据中填充大量的editText数据。因此,我不是在手动为所有文本框设置数据,而是在编写一种可以对我有效的方法……为此,我需要这样做。
Code_Life '04

Answers:


363

在您的活动中,尝试以下操作:

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

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

    getResources().getResourceName(int resid);

在Kotlin Now:

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

4
感谢您的回答,我花了一个小时的大部分时间来研究这个问题-开发站点一直将我指向getString()-对此毫无用处。
史蒂夫

8
知道getResourceEntryName(int resid)和之间有什么区别getResourceName(int resid)吗?
约书亚·品特

10
@JoshPinter参考说: getResourceEntryName:返回给定资源标识符的条目名称 getResourceName:返回给定资源标识符的全名。此名称是格式为“ package:type / entry”的单个字符串,然后区别似乎在于所添加的package:type中的getResourceName
Jose_GD 2014年

@Shubhayu-您如何在浓缩咖啡测试中做到这一点?getResources()函数似乎不可用!
1ak31sha

如果您使用Proguard(minifyEnabled true),我不建议您使用它,尤其是对于getResources().getIdentifier(...
user25

9

您要访问的单选按钮id(name)radio1,因此具有该id的id('long'类型)。你用这个

getResources().getResourceEntryName(id);

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


2
谢谢。很高兴有人实际上回答了这个问题,而不是通常的“为什么需要[noob]”回答。当我遍历元素时,拥有元素的名称对于调试是无价的。我的意思是,真的,我该如何找到ID为354814715的TextView?(如果我没记错的话,即使在两次编译之间也不是恒定不变的)-不确定OP为什么需要它,但是我需要它来验证我的字体缩放功能实际上是在遍历所有子元素。
史蒂夫


1

如果我是对的,那么您想要检索的是单词“ radio1”(从id本身吗?),因此,如果是这种情况,那么首先需要获取其id。

int intname= buttonname.getId();

然后得到它的结果

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

希望我能帮上忙


-1

您是说要获取id的字符串文本?

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

如果您有布局,并且想要查找某个View是否具有特定的ID,则可以遍历整个布局并使用getId()进行检查(如果每个View的ID是您要查找的ID)。

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


不,你错了。我想从 android:id =“ @ + id / radio1”检索文本radio1
Code_Life 2012年

文本radio1是视图的ID。它不是一个简单的文本,您可以获取,拆分等。为了更好地帮助您,您能否告诉我们您究竟需要什么文本?
Dimitris Makris

@DimitrisMakris:这是一个很长的故事..我需要从服务器接收的一些数据中,将数据填充到大量的editText中。因此,我不是在手动为所有文本框设置数据,而是在编写一种可以为我工作的方法..为此,我需
要这样做

因此,如果您有10个响应,例如要填充10个单选按钮的字符串,我认为一个解决方案可能是动态创建这些单选按钮并设置其值。另一种方法是将带单选按钮的ListView用作列表项,如果这当然满足您对布局的需求。
Dimitris Makris

谢谢您的安息。但是你完全错了,我有10个editBox,并且在解析该字符串后将其作为json字符串接收,并在这10个editbox中填充值,将其转换为HashMap。现在改为手动将每个值(对应于hashmap的键)映射到editText文本。我正在编写一种可能对我有用的方法。
Code_Life '04
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.