Android'da android:id ve item android:id nasıl çalışır

Kerem Aydın·7 Temmuz 2026·⏱2 dk

android:id, layout dosyalarında View bileşenlerini benzersiz şekilde tanımlamak için kullanılan bir niteliktir; item android:id ise kaynak koleksiyonları (arrays, selector, styles) içinde kullanılarak kaynak öğelerini bir tanımlayıcıya bağlamak için uygulanır. Aşağıda bunun tam olarak ne anlama geldiği ve pratikte nasıl kullanılacağı açıklanmaktadır.

android:id nedir ve nereye yerleştirilir

  • layout.xml içindeki android:id, bir View'a isim verir; böylece koddan R.id.NAME, findViewById veya View Binding aracılığıyla bu View'a erişilebilir. Örnek:
<Button
    android:id="@+id/myButton"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Bana tıkla" />
  • item android:id, kaynak dosyaları içinde (örneğin arrays.xml, selector, styles) belirli bir item'ı işaretlemek ve daha sonra programatik olarak ID'sini veya değerini almak için kullanılır:
<array name="myArray">
    <item android:id="@+id/item1">Öğe 1</item>
    <item android:id="@+id/item2">Öğe 2</item>
</array>

Yeni bir ID oluştururken @+id/ kullanın, mevcut bir ID'ye referans verirken @id/ kullanın.

Derleme sırasında ne olur ve kodda nasıl uygulanır

Gradle/Android derleme sırasında, R sınıfında tamsayı sabitler üretir (R.id.myButton = 0x7f08xxxx). Bu, dize aramaları olmadan hızlı erişim sağlar. Kullanım örnekleri:

val btn = findViewById<Button>(R.id.myButton)
btn.setOnClickListener { /* eylem */ }

View Binding veya Kotlin synthetic/Compose kullanıyorsanız, dinamik olarak oluşturulan View'lar için veya kodda kaynakları bağlarken açık ID'lere hâlâ ihtiyaç duyulabilir.

item android:id için, TypedArray işleme sırasında veya selector'da durum eşleştirmesi yaparken ID'yi alıp kullanabilirsiniz:

<selector>
    <item android:id="@+id/pressed" android:state_pressed="true" android:drawable="@color/red" />
</selector>

Manuel olarak "sabit" sayısal ID'ler atamayın — bunlar derleme sırasında değişir ve hatalara yol açar.

Pratik ipuçları ve desenler

  • Kapsam: ID'ler uygulama içinde benzersizdir. include/layout kullanırken aynı isimlerin çakışmadığından emin olun.
  • View Binding, findViewById ihtiyacını azaltır ancak ID'ler dinamik yapılar ve testler için hâlâ faydalıdır.
  • Dinamik listeler ve adaptörler için, gerçekten kalıcı bir tanımlayıcı gerekiyorsa yalnızca stable IDs (setHasStableIds) kullanın.
  • Hata ayıklama için: "No view found for id" mesajı, bu ID'ye sahip View'ın mevcut hiyerarşide bulunamadığı anlamına gelir — inflate, include, Fragment/Activity yapılarını kontrol edin.

Sık yapılan hatalar

  • Oluşturma sırasında @id/ yerine @+id/ kullanılması — "resource not found" hatasına yol açar.
  • Aynı kapsayıcı içinde aynı ID'lere sahip layout'ların klonlanması — çakışmalar ve beklenmeyen erişimler.
  • Açıkça dışa aktarılmadan başka bir derleme/kütüphaneden ID kullanmaya çalışılması — kaynağa erişilemez.

SSS

  • Tüm View'lara her zaman ID vermek gerekir mi? Hayır. Yalnızca koddan veya testlerden erişeceğiniz View'lara ID verin.
  • tag ile id arasındaki fark nedir? tag, etiketler için rastgele bir dize/nesnelerdir; id ise sistem ve R sınıfı tarafından kullanılan tamsayı bir kaynaktır.
  • Styles içinde ID kullanılabilir mi? Genellikle oraya nitelikler yerleştirilir, ancak bazı kaynaklar (örneğin seçiciler) ID içeren item'ları destekler — bilinçli şekilde uygulayın.

Basit layout'larla pratik yapın: @+id ile küçük örnekler oluşturun, R.id üzerinden erişimi deneyin ve include ile Fragment yönetimi sırasındaki davranışı kontrol edin — böylece hataları daha hızlı görebilirsiniz.