R.id'ye programlı olarak id ekle


91

Daha EditTextsonra bir birim testinde başvurmaya çalıştığım bir nesne oluşturuyorum . Yeni eklemek için en iyi yolu nedir idiçin R.idbu dinamik olarak oluşturulan nesne için daha sonra yoluyla başvurmak, böylece findViewById()birim test?


Yanıtlar:


209

Daha sonra R.id sınıfında kullanacağınız ID'leri bir xml kaynak dosyası kullanarak ayarlayabilir ve Android SDK'nın derleme sırasında onlara benzersiz değerler vermesine izin verebilirsiniz.

res / values ​​/ ids.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <item name="my_edit_text_1" type="id"/>
    <item name="my_button_1" type="id"/>
    <item name="my_time_picker_1" type="id"/>

</resources>

Kodda kullanmak için:

myEditTextView.setId(R.id.my_edit_text_1);

1
dosyayı anothername.xml olarak adlandırabilir miyim?
ofir_aghai

2
Geç cevap verdiğim için özür dilerim, ama evet, tüm Android kaynaklarında olduğu gibi, istediğiniz gibi .xml adını verebilirsiniz ...
Gizli Android

2

Google geliştiricisine bağlı olarak her görünüm için setId kullanabilir ve herhangi bir pozitif sayı atayabilirsiniz:

Bu görünüm için tanımlayıcıyı ayarlar. Bu görünümün hiyerarşisinde tanımlayıcının benzersiz olması gerekmez. Tanımlayıcı pozitif bir sayı olmalıdır. Bağlantı

yani kullanabilirsin

EveryView.setId(int);

0

İşte kotlin'deki bir uzantı işlevi olarak çözümüm:

/* sets a valid id that isn't in use */
fun View.findAndSetFirstValidId() {
    var i: Int
    do {
        i = Random.nextInt()
    } while (findViewById<View>(i) != null)
    id = i
}
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.