Come ottenere il nome risorsa dall'ID risorsa


158


Nel mio layout ho definito qualcosa del genere.

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

Supponiamo che alcune funzioni in attività mi restituiscano questo id (id di radioButton). Ora voglio ottenere questo testo radio1 da questo ID. In breve, voglio recuperare il testo scritto in radio1android:id="@+id/radio1"

Qualcuno può dirmi come è possibile?


È una lunga storia ... ho bisogno di popolare i dati in un gran numero di editText da alcuni dati ricevuti dal server. Quindi, invece di impostare manualmente i dati su tutte le caselle di testo, sto scrivendo un metodo che potrebbe funzionare per me .. per questo ho bisogno di questo.
Code_Life,

Risposte:


363

Nella tua attività, prova questi:

  1. per ottenere una stringa come radio1:

    getResources().getResourceEntryName(int resid);
  2. per ottenere una stringa come com.sample.app:id/radio1:

    getResources().getResourceName(int resid);

In Kotlin Now:

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

4
Grazie per aver risposto a questa domanda, ho trascorso la parte migliore di un'ora cercando su Google questo problema - il sito di sviluppo continuava a indicarmi getString () - che è stato dannatamente inutile per questo.
Steve,

8
Hai idea di quale sia la differenza tra getResourceEntryName(int resid)e getResourceName(int resid)?
Joshua Pinter,

10
@JoshPinter il riferimento dice: getResourceEntryName: restituisce il nome della voce per un determinato identificatore di risorsa getResourceName: restituisce il nome completo per un determinato identificatore di risorsa. Questo nome è una singola stringa del modulo "pacchetto: tipo / voce" La differenza sembra quindi essere nel pacchetto aggiunto : digitare per getResourceName
Jose_GD

@Shubhayu - come hai potuto farlo in un test espresso? La funzione getResources () non sembra essere disponibile!
1ak31 dal

Non consiglierei di usarlo se usi Proguard ( minifyEnabled true), specialmente pergetResources().getIdentifier(...
user25

9

Hai un id (tipo "lungo") da quell'id a cui vuoi accedere id pulsante (nome) che è radio1 . Lo usi tu

getResources().getResourceEntryName(id);

usando sopra puoi ottenere il nome del pulsante di opzione, ad esempio radio1. qui il parametro id è quello che hai (tipo lungo) . Prova questo ti aiuterà al 100%.


2
Grazie. Sono contento che qualcuno abbia effettivamente risposto alla domanda invece delle solite risposte "perché hai bisogno di quel [noob]". Avere il nome dell'elemento mentre sto iterando attraverso di essi è INVALUABILE per il debug. Voglio dire, davvero, come posso trovare TextView con ID 354814715? (che se non sbaglio non è nemmeno costante tra le compilazioni) - non sono sicuro del motivo per cui l'OP ne avesse bisogno, ma ne avevo bisogno per verificare che la mia funzione di ridimensionamento dei caratteri stesse effettivamente ripetendo tutti gli elementi secondari.
Steve,


1

Se ho ragione, quello che volevi recuperare è la parola "radio1" (dall'id stesso?), Quindi se è così allora prima devi ottenere il suo id.

int intname= buttonname.getId();

quindi ottenere il risultato di esso

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

speravo di aiutare


-1

Vuoi dire che vuoi prendere il testo stringa dell'id?

Dato che l'hai definito, dovresti sapere di cosa si tratta.

Se si dispone di un layout e si desidera scoprire se una vista ha un ID specifico, è possibile attraversare l'intero layout e verificare con getId (), se l'id di ciascuna vista è l'id che si sta cercando.

Spero che questo aiuti (se ho capito bene la tua domanda .. :))


No, hai sbagliato tutto. Voglio recuperare il testo radio1 da Android: id = "@ + id / radio1"
Code_Life

Text radio1 È l'id della tua vista. Non è un semplice testo che puoi ottenere, dividere, ecc. Per aiutarti meglio, puoi dirci a cosa serve esattamente questo testo?
Dimitris Makris,

@DimitrisMakris: è una lunga storia .. ho bisogno di popolare i dati in un gran numero di editText da alcuni dati ricevuti dal server. Quindi, invece di impostare manualmente i dati su tutte le caselle di testo, sto scrivendo un metodo che potrebbe funzionare per me .. per questo ho bisogno di questo
Code_Life

Quindi, se hai una risposta di 10, ad esempio stringhe con cui vuoi popolare 10 pulsanti radio, penso che una soluzione potrebbe essere quella di creare dinamicamente questi pulsanti radio e impostarne il valore. Un altro approccio potrebbe essere quello di utilizzare un ListView con i pulsanti radio come voci di elenco, se ovviamente questo si adatta alle tue esigenze per quanto riguarda il layout.
Dimitris Makris,

Grazie per la tua risposta. Ma hai sbagliato tutto ho 10 editBox e ricevo come stringa json il valore da compilare in queste 10 editbox dopo che questa stringa è stata analizzata e convertita in HashMap. Ora invece mappando manualmente ogni valore (corrispondente alla chiave dell'hashmap) per modificare il testo del testo .. Sto scrivendo un metodo che potrebbe funzionare per me.
Code_Life,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.