Como obter o Nome do Recurso a partir do ID do Recurso

158


No meu layout, eu defini algo como isto.

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

Suponha que alguma função em atividade retorne esse id (id de radioButton). Agora eu quero obter esse texto radio1 desse id. Em suma, quero recuperar o texto radio1 escrito emandroid:id="@+id/radio1"

Alguém pode me dizer como isso é possível?

Code_Life
fonte
É uma longa história ... eu preciso preencher dados em um grande número de editText de alguns dados recebidos do servidor. Então, em vez de definir manualmente os dados para todas as caixas de texto, estou escrevendo um método que poderia funcionar para mim .. por isso preciso disso.
código é o seguinte

Respostas:

363

Na sua atividade, tente o seguinte:

  1. para obter string como radio1:

    getResources().getResourceEntryName(int resid);
  2. para obter string como com.sample.app:id/radio1:

    getResources().getResourceName(int resid);

No Kotlin Now:

val name = v.context.resources.getResourceEntryName(v.id)
Shubhayu
fonte
4
Obrigado por responder, passei a maior parte de uma hora pesquisando esse problema - o site de desenvolvimento continuava me apontando para getString () - que era inútil para isso.
Steve
8
Alguma idéia de qual é a diferença entre getResourceEntryName(int resid)e getResourceName(int resid)?
Joshua Pinter
10
@ JoshPinter, a referência diz: getResourceEntryName: Retorna o nome da entrada para um determinado identificador de recurso getResourceName: Retorna o nome completo para um determinado identificador de recurso. Este nome é uma cadeia de caracteres única do formulário "package: type / entry" A diferença parece estar no pacote adicionado : type for getResourceName
Jose_GD
@Shubhayu - como você pode fazer isso em um teste de café expresso? A função getResources () não parece estar disponível!
31
Eu não recomendaria usá-lo se você usar Proguard ( minifyEnabled true), especialmente paragetResources().getIdentifier(...
user25:
9

Você tem um ID (tipo 'long') a partir desse ID e deseja acessar o ID do botão de opção (nome) que é radio1 . Você usa isso

getResources().getResourceEntryName(id);

Ao usar acima, você pode obter o nome do botão de opção, ou seja, radio1. aqui o parâmetro id é o que você possui (tipo longo) . Tente isso, ele ajuda a 100%.

Anil Jadhav
fonte
2
Obrigado. Fico feliz que alguém tenha respondido à pergunta em vez das respostas usuais "por que você precisa disso?". Ter o nome do elemento enquanto eu estou iterando através deles é INVALUABLE para depuração. Quero dizer, realmente, como vou encontrar o TextView com o ID 354814715? (que, se não me engano, nem sempre é constante entre as compilações) - não sei por que o OP precisava disso, mas precisava verificar se minha função de escalonamento de fontes estava na iteração em todos os subelementos.
Steve
2

Kotlin:

val name = v.context.resources.getResourceEntryName(v.id)
Anand Makwana
fonte
2
Talvez você pode adicionar mais informações sobre o problema seja resolvido desta forma e como ele faz isso :)
Philipp Meissner
@PhilippMeissner é tudo óbvio
Jemshit Iskenderov
Vamos concordar em discordar.
Philipp Meissner
1

Se eu estiver certo, o que você deseja recuperar é a palavra "radio1" (do próprio ID?). Se esse for o caso, primeiro você precisará obter o seu ID.

int intname= buttonname.getId();

então obtenha o resultado disso

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

esperava ter ajudado

Fahad Maqsood Qazi
fonte
-1

Você quer dizer que deseja pegar o texto da string do id?

Desde que você o definiu, você deve saber o que é isso.

Se você possui um layout e deseja descobrir se um View tem um ID específico, você pode percorrer todo o layout e verificar com getId (), se o ID de cada View é o ID que você está procurando.

Espero que isso ajude (se entendi corrija sua pergunta .. :))

Dimitris Makris
fonte
Não, você entendeu tudo errado. Eu quero recuperar o texto radio1 do android: id = "@ + id / radio1"
#
O texto radio1 É o ID da sua visualização. Não é um texto simples que você pode obter, dividir, etc. Para melhor ajudá-lo, você pode nos dizer o que exatamente você precisa para este texto?
precisa saber é o seguinte
@ DimitrisMakris: É uma longa história ... eu preciso preencher dados em um grande número de editText de alguns dados recebidos do servidor. Então, em vez de definir manualmente os dados para todos os caixa de texto, eu estou escrevendo um método que poderia este trabalho para mim .. para que eu preciso esta
Code_Life
Portanto, se você tiver uma resposta de 10, por exemplo, seqüências de caracteres com as quais deseja preencher 10 botões de opção, acho que uma solução seria criar dinamicamente esses botões de opção e definir seu valor. Outra abordagem poderia ser usar um ListView com botões de opção como itens de lista, se é claro que isso atende às suas necessidades em relação ao layout.
precisa saber é o seguinte
Obrigado pela sua resposta. Mas você entendeu tudo errado, eu tenho 10 editBox e recebo como json string com o valor a ser preenchido nesses 10 editbox depois que essa string é analisada e convertida em HashMap. Agora, em vez disso, mapear manualmente cada valor (correspondente à chave do hashmap) para editar o texto do texto. Estou escrevendo um método que poderia funcionar para mim.
código é o seguinte