Kaynak kimliğinden Kaynak Adı alma


158


Düzenimde böyle bir şey tanımladım.

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

Etkinlikteki bazı işlevlerin bana bu kimliği döndürdüğünü varsayın (radioButton kimliği). Şimdi bu id'den bu metni radio1 almak istiyorum . Kısacası ben yazılı metin radio1 almak istiyorumandroid:id="@+id/radio1"

Birisi bana bunun nasıl mümkün olduğunu söyleyebilir mi?


Onun uzun bir hikaye .. i sunucudan alınan bazı verilerden editText büyük bir hayır içine veri doldurmanız gerekir. Böylece tüm metin kutusuna el ile veri ayarlama yerine, bu benim için çalışabilir bir yöntem yazıyorum .. Bunun için buna ihtiyacım var.
Code_Life

Yanıtlar:


363

Faaliyetinizde şunları deneyin:

  1. gibi dize almak için radio1:

    getResources().getResourceEntryName(int resid);
  2. gibi dize almak için com.sample.app:id/radio1:

    getResources().getResourceName(int resid);

Şimdi Kotlin'de:

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

4
Bunu cevapladığınız için teşekkür ederim, bu sorunu googling bir saat daha iyi bir parçası geçirdim - dev site beni bunun için işe yaramaz kanlı getString () - işaret etti.
Steve

8
Arasındaki fark ne herhangi bir fikir getResourceEntryName(int resid)ve getResourceName(int resid)?
Joshua Pinter

10
Referans diyor @JoshPinter: getResourceEntryName: Dönüş Verilen kaynak tanımlayıcı için giriş adı getResourceName: Dönüş Verilen kaynak tanımlayıcı için tam adı. Bu ad "package: type / entry" biçiminde tek bir dizedir. Fark daha sonra eklenen pakette gibi görünüyor : getResourceName
Jose_GD

@Shubhayu - Bunu bir espresso testinde nasıl yapabilirsiniz? getResources () işlevi mevcut görünmüyor!
1ak31sha

Proguard ( minifyEnabled true) kullanıyorsanız, özellikle kullanmamanızı tavsiye etmemgetResources().getIdentifier(...
user25

9

Sen var id ( 'uzun' türü) erişim radyo düğmesi istediğiniz o id gelen kimliği (isim) olduğunu radyo1 . Bunu kullan

getResources().getResourceEntryName(id);

yukarıdaki kullanımda radyo düğmesinin adını alabilirsiniz, örneğin radyo1. burada parametre kimliği sahip olduğunuzdur (uzun tip) . Bu% 100 size yardımcı olacaktır deneyin.


2
Teşekkür ederim. Memnuniyetli bir kişi, her zamanki "neden bu [noob] 'a ihtiyacınız var?" Yanıtları yerine soruyu yanıtladı. Bunların üzerinden yineleme yaparken öğenin adına sahip olmak hata ayıklama için GEÇERSİZDİR. Yani, gerçekten, 354814715 kimliğine sahip TextView'u nasıl bulacağım? (ki eğer yanılmıyorsam derlemeler arasında bile sabit değil) - OP'nin neden ona ihtiyaç duyduğundan emin değilim, ancak yazı tipi ölçeklendirme işlevimin tüm alt öğeler olsa da yinelendiğini doğrulamak için ona ihtiyacım vardı.
Steve


1

Eğer haklıysam, geri almak istediğiniz şey "radio1" (kimliğin kendisinden mi?)

int intname= buttonname.getId();

o zaman sonucunu al

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

umarım yardımcı oldum


-1

Kimliğin dize metnini almak istiyor musunuz?

Onu tanımladığınız için bunun ne olduğunu bilmelisiniz.

Bir mizanpajınız varsa ve bir Görünümün belirli bir kimliği olup olmadığını bulmak istiyorsanız, tüm düzeni geçebilir ve getId () ile kontrol edebilirsiniz, her Görünümün kimliği aradığınız kimlik ise ..

Umarım bu yardımcı olur (eğer sorunuzu düzeltirsem .. :))


Hayır, yanlış anladın. Metin almak istiyorum radyo1 den = id "+ id / radyo1": android
Code_Life

Metin radio1, Görünümünüzün kimliğidir. Bu, alabileceğiniz, bölebileceğiniz vb. Basit bir metin değildir. Size daha iyi yardımcı olmak için, bu metne tam olarak neye ihtiyacınız olduğunu söyleyebilir misiniz?
Dimitris Makris

@DimitrisMakris: Onun uzun bir hikaye .. i sunucudan alınan bazı verilerden editText büyük bir hayır içine veri doldurmak gerekir. Böylece tüm metin kutusuna el ile veri ayarlama yerine, bu benim için işe yarayabilir bir yöntem yazıyorum .. bunun için ben buna ihtiyacım var
Code_Life 13:12

Bu nedenle, örneğin 10 radyo düğmesini doldurmak istediğiniz dizeler gibi bir yanıtınız varsa, bence bir çözüm, bu radyo düğmelerini dinamik olarak oluşturmak ve değerlerini ayarlamak olabilir. Başka bir yaklaşım, radyo düzeni ile birlikte ListView'i liste öğeleri olarak kullanmak olabilir, eğer tabii ki düzen ile ilgili ihtiyaçlarınıza uyuyorsa.
Dimitris Makris

İlginiz için teşekkürler. Ama u yanlış tüm 10 editBox var ve bu dize parmerd sonra HashMap dönüştürülür sonra bu 10 editbox doldurulması gereken değeri ile json dize olarak alırsınız. Şimdi bunun yerine manuel olarak her metni eşleme (hashmap anahtarına karşılık gelen) editText metin için .. i benim için bu işe yarayabilir bir yöntem yazıyorum.
Code_Life
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.