So erhalten Sie den Ressourcennamen von der Ressourcen-ID

158


In meinem Layout habe ich so etwas definiert.

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

Angenommen, eine Funktion in der Aktivität gibt mir diese ID (ID von radioButton) zurück. Jetzt möchte ich diesen Text radio1 von dieser ID erhalten. Kurz gesagt, ich möchte den in radio1 geschriebenen Text abrufenandroid:id="@+id/radio1"

Kann mir jemand sagen, wie es möglich ist?

Code_Life
quelle
Es ist eine lange Geschichte. Ich muss Daten aus einigen vom Server empfangenen Daten in eine große Anzahl von editText einfügen. Anstatt Daten manuell auf alle Textfelder einzustellen, schreibe ich eine Methode, die für mich funktionieren könnte. Dafür brauche ich diese.
Code_Life

Antworten:

363

Versuchen Sie in Ihrer Aktivität Folgendes:

  1. um einen String zu bekommen wie radio1:

    getResources().getResourceEntryName(int resid);
  2. um einen String zu bekommen wie com.sample.app:id/radio1:

    getResources().getResourceName(int resid);

In Kotlin Now:

val name = v.context.resources.getResourceEntryName(v.id)
Shubhayu
quelle
4
Vielen Dank für die Beantwortung dieser Frage. Ich habe den größten Teil einer Stunde damit verbracht, dieses Problem zu googeln. Die Entwickler-Site hat mich immer wieder auf getString () verwiesen. Das war dafür verdammt nutzlos.
Steve
8
Irgendeine Idee, was der Unterschied zwischen getResourceEntryName(int resid)und ist getResourceName(int resid)?
Joshua Pinter
10
@JoshPinter In der Referenz heißt es: getResourceEntryName : Gibt den Eintragsnamen für eine bestimmte Ressourcenkennung zurück. GetResourceName: Gibt den vollständigen Namen für eine bestimmte Ressourcenkennung zurück. Dieser Name ist eine einzelne Zeichenfolge der Form "Paket: Typ / Eintrag". Der Unterschied scheint dann im hinzugefügten Paket: Typ für getResourceName
Jose_GD
@ Shubhayu - wie könnten Sie dies in einem Espresso-Test tun? Die Funktion getResources () scheint nicht verfügbar zu sein!
1ak31sha
Ich würde es nicht empfehlen, wenn Sie Proguard ( minifyEnabled true) verwenden, insbesondere fürgetResources().getIdentifier(...
user25
9

Sie haben eine ID (Typ 'long') von dieser ID, auf die Sie zugreifen möchten, die Optionsfeld- ID (Name) , die radio1 ist . Du benutzt das

getResources().getResourceEntryName(id);

Bei Verwendung von oben können Sie den Namen des Optionsfelds erhalten, dh radio1. Hier haben Sie die Parameter-ID (langer Typ) . Versuchen Sie dies, es wird Ihnen 100% helfen.

Anil Jadhav
quelle
2
Danke dir. Ich bin froh, dass jemand die Frage tatsächlich beantwortet hat, anstatt der üblichen "Warum brauchst du das [noob]" - Antworten. Den Namen des Elements zu haben, während ich sie durchlaufe, ist für das Debuggen UNWERTBAR. Ich meine wirklich, wie finde ich die Textansicht mit der ID 354814715? (was, wenn ich mich nicht irre, zwischen den Kompilierungen nicht einmal konstant ist) - Ich bin mir nicht sicher, warum das OP es brauchte, aber ich brauchte es, um zu überprüfen, ob meine Schriftartenskalierungsfunktion tatsächlich durch alle Unterelemente iterierte.
Steve
2

Kotlin:

val name = v.context.resources.getResourceEntryName(v.id)
Anand Makwana
quelle
2
Vielleicht können Sie weitere Informationen darüber hinzufügen, welches Problem dies löst und wie es dies tut :)
Philipp Meissner
@PhilippMeissner es ist alles offensichtlich
Jemshit Iskenderov
Lassen Sie uns zustimmen, nicht zuzustimmen.
Philipp Meissner
1

Wenn ich recht habe, wollten Sie das Wort "radio1" (von der ID selbst?) Abrufen. Wenn dies der Fall ist, müssen Sie zuerst die ID abrufen.

int intname= buttonname.getId();

dann erhalten Sie das Ergebnis davon

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

hoffte ich half

Fahad Maqsood Qazi
quelle
-1

Sie meinen, Sie möchten den Zeichenfolgentext der ID übernehmen?

Da Sie es definiert haben, sollten Sie wissen, was dies ist.

Wenn Sie ein Layout haben und herausfinden möchten, ob eine Ansicht eine bestimmte ID hat, können Sie das gesamte Layout durchlaufen und mit getId () überprüfen, ob die ID jeder Ansicht die gesuchte ID ist.

Hoffe das hilft (wenn ich verstanden habe deine Frage richtig zu stellen .. :))

Dimitris Makris
quelle
Nein, du hast alles falsch verstanden. Ich möchte Text radio1 von Android
Code_Life
Text radio1 IST die ID Ihrer Ansicht. Es ist kein einfacher Text, den Sie erhalten, teilen usw. können. Um Ihnen besser zu helfen, können Sie uns sagen, wofür genau Sie diesen Text benötigen?
Dimitris Makris
@ DimitrisMakris: Es ist eine lange Geschichte. Ich muss Daten aus einigen vom Server empfangenen Daten in eine große Anzahl von editText einfügen. Anstatt Daten manuell auf alle Textfelder festzulegen, schreibe ich eine Methode, die für mich funktionieren könnte. Dafür brauche ich diese
Code_Life
Wenn Sie also eine Antwort von 10 haben, zum Beispiel Zeichenfolgen, mit denen Sie 10 Radiobuttons füllen möchten, könnte eine Lösung darin bestehen, diese Radiobuttons dynamisch zu erstellen und ihren Wert festzulegen. Ein anderer Ansatz könnte darin bestehen, eine ListView mit Radiobuttons als Listenelemente zu verwenden, wenn dies natürlich Ihren Anforderungen hinsichtlich des Layouts entspricht.
Dimitris Makris
Vielen Dank für Ihre Antwort. Aber du hast alles falsch verstanden. Ich habe 10 editBox und erhalte als JSON-Zeichenfolge den Wert, der in diese 10 Bearbeitungsfelder eingegeben werden soll, nachdem diese Zeichenfolge parserd ist und in HashMap konvertiert wurde. Jetzt ordne ich stattdessen jeden Wert (der dem Schlüssel der Hashmap entspricht) manuell dem Text von editText zu. Ich schreibe eine Methode, die dies für mich funktionieren könnte.
Code_Life