Android'de aynı kimliği farklı düzende kullanabilir miyim?


92

Android geliştirmede yeniyim. Resimler için ve TextViewsfarklı LayoutXML dosyalarında aynı kimliği kullanmak sorun değil mi?

Tutulma onları benim için otomatik olarak listelediğinde, projedeki tüm düzen değişkenlerini listeler, yani çarpışır mı? Şimdiye kadar farklı düzenlerde aynı kimliği kullanırken herhangi bir sorun fark etmedim, ancak uzun vadede endişeliyim.



@Pavel, kısıtlamaları ayarlamak için hala kimliklere ihtiyacınız olacak.
Sadda Hussain

Yanıtlar:


96

Farklı düzenler için farklı kimlikler kullanmanız önerilir. Uzun vadede, çok sayıda düzene sahip olduğunuzda ve bu nedenle birçok kimliğe sahip olduğunuzda, onları ayırt etmek çok karmaşık hale gelecektir.

Genellikle böyle benim kimliklerini isim: layoutName_elementId.

Özellikle otomatik tamamlamayı kullanırken aradığım kimliği kolayca bulmam işe yarıyor (hangi düzende çalıştığımı biliyorum, ancak kimliği gerçekten bilmiyorum; bu durumda, adlandırma stratejimle, yalnızca düzen adını yazın ve o düzenin tüm kimliklerini getirir).

Düzenler ve kimlikler hakkında daha fazla bilgiyi burada bulabilirsiniz .

Mutlu kodlamalar,


2
ok_buttonHer aktivitenizde aramanın problemi nedir diyelim ? Aradığınız sohbeti biliyorsanız, otomatik tamamlama bu şekilde daha da nettir.
Dan Chaltiel

132

Kısa cevap: Evet, yapabilirsin.

Uzun cevap: Bunu yapabilirsiniz, çünkü mizanpajınızın bir kısmına bir referans almak için findViewById () 'yi her kullandığınızda, yöntem o görünümü yalnızca o anda şişirilmiş düzende arar. Dolayısıyla, başka bir düzende aynı kimliğe sahip başka bir görünümünüz olsa bile, Android onu orada aramayacaktır.


15
Daha uzun bir cevap verebilir misin? R.id.layout_id statik bir tamsayı olduğundan ve derleme sırasında önceden belirlendiğinden findViewById () şu anda şişirilmiş düzeni bilmez.
Chloe

22
Bu soruyla karşılaşan başka birinin iyiliği için Chloe'nin isteğine cevap vermek istedim. Kimlik, her görünüm için aynı olacaktır, ancak aynı etkinlikte asla iki kez görünmeyecektir. Bir metafor olarak, size üzerinde bir sürü rakam olan bir deste kağıt verirsem ne olacağını düşünün. Bu kağıtların birçoğunun üzerinde 4 numara yazıyor. Sayfalardan birine bakıyorsunuz ve sizden 4'ü daire içine almanızı istiyorum. Bu kolay. Şimdi üzerinde 4 olan başka bir sayfaya bakarsınız. Bunu da bulabilir ve daire içine alabilirsiniz. Numaranın önceden tanımlanmış olması önemli değildir.
Ted Cannelongo

6
Ted'in yorumuna katılmıyorum, aynı Aktivite üzerinde aynı ID'ye sahip iki bileşene aynı anda sahip olabilirsiniz. Az önce bir uygulamada sorun yaşadım, ana aktivitede aynı anda iki farklı ViewPager kullanıyordum. Şu anda ID ile görüntülenen ViewPager'ı almaya çalıştığımda, aslında arka planda çalışan diğerini aldı. İki kimliği benzersiz hale getirerek sorunu çözdüm.
Yoann Hercouet

9
Ben de aynı tabakanın (Etkinlik) vardı çünkü bu olduğuna inanıyoruz @YoannHercouet
Naheel

22

Geliştirici API kılavuzlarına göre:

Bir kimliğin tüm ağaç boyunca benzersiz olması gerekmez, ancak aradığınız ağacın bölümünde benzersiz olmalıdır (bu genellikle ağacın tamamı olabilir, bu nedenle mümkün olduğunda tamamen benzersiz olması en iyisidir).

Yani kısa cevap, bunun zorunlu olmadığı, ancak olası çatışmalardan kaçınmak için iyi bir uygulama olduğudur.


1
Bir keresinde aynı kimlikleri tesadüfen yarattım. Onları daha sonra yeniden adlandırmayı kaldırmak çok uğraştı çünkü tüm örnekler yeniden canlandırıldı. Bu, bir kimlik çatışması yaşadığınızda, mahvolduğunuz anlamına gelir. Her şeyi yeniden ayırmak çok zor olacak.
t3chb0t

@ t3chb0t Gerçekten! "Yalnızca yerel" seçeneğini işaretleseniz bile Android Studio tüm örnekleri yeniden adlandırır. Kesinlikle saçma.
John Glen

15

Önerilmez, çünkü gelecekte onu yeniden düzenlemeniz gerekirse view id, Android stüdyosu onu tüm XMLdosya ve sınıflarda yeniden düzenler ve başınız belaya girer.

Ancak, aynı şeyi kullanmanız gereken bazı durumlar da vardır, idörneğin bazı soyutlarınız varsa ve birden çok mizanpajı yeniden kullanıyorsanız.

Projenizde viewsaynı id'solan birden fazla varsa ve yeniden düzenleme yapmanız, manuel olarak yapmanız, IDE işlevinde derleme işlevini kullanmamanız, mizanpaj idiçindeki hedef görünümde değişiklik yapmanız ve XMLardından mizanpaj içindeki kırmızı hatayı düzeltmeniz gerekiyorsa.

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.