Selamlar,

Sıradan bir Android Activity gerçeklemesinde, setContentView() metoduyla daha önceden hazırlanmış bir yerleşim (layout) referansını (R.layout.anaekran gibi) alıp kullanıcının o yerleşime uygun görünümü (bu bazen bir RelativeLayout, bazen LinearLayout) kullanabilmesini, görebilmesini sağlıyoruz.

setContentView()'e ek olarak bir de LayoutInflater var. Farklı örneklerde inflate yöntemiyle, herhangi bir layout XML'inin alınıp özel olarak bir ViewGroup'a aktarıldığını okudum. Fakat bunun ne demek olduğunu anlayamadım. Yani niçin işletim sisteminin bizim yerimize yerleşim öğelerini render etmesine izin vermiyoruz da, kendimiz inflate ederek bunu uzun yoldan yapıyoruz? Bazen duruma göre, kendi yazmış olduğumuz metotlarda özel viewlar (görünenler) gösteriyoruz. Ama zaten bunu da farklı farklı xml dosyalarına başvurup yapabiliyoruz. İşin içinden çıkamadım. (Android geliştirme konusunda çaylağım. Buraya sorup, ana dilde tartışabilelim istedim.)

  • LayoutInflater niçin vardır?
  • Bir yerleşim dosyasından alıp view sınıfından üretip nesne haline getirdiğimiz görünen elemanı, niçin elle, açıktan inflate ederiz?
  • Bu inflate yöntemini kullanan bir örnek uygulamadan örnek bir eylem/hareket verebilir misiniz?

Sevgiler, saygılar. Ayrıca, hayırlı bayramlar.

soruldu: 20 Ağu '12, 19:34

murtaza's gravatar image

murtaza
981122535
cevap kabul oranı: 29%


setContentView() Activity'de gösterilecek View'ı belirler. Sadece bir layout'un R classı içindeki referansını değil, direk bir View'da verebilirsiniz. setContentView() ile bir layout görüntüledikten sonra bu layout içine başka xml dosyalarından oluşturulmuş View yada ViewGroup'lar eklemek isteyebiliriz.

Inflater'lar ise bizim xml dosyalarından java objeleri elde etmemizi sağlarlar. MenuInflater sınıfı menü xml dosyalarından menüleri oluşturmamızı sağlarken, LayoutInflater sınıfı layout xml dosyalarından bir view hiyerarşisi oluşturmamızı sağlar.

Bir ListActivity'miz olduğunu varsayalım. setContentView() ile içerisinde ListView bulunan bir layout'u göstertebiliriz. Ancak listedeki her öğeyi kendi tasarladığımız list_item.xml isimli bir layout dosyasından oluşturmak istersek, bir adapter sınıfından kendi adapterimizi türetecek ve bu sınıfın getView() methodunda list_item.xml dosyasından bir View objesi oluşturmamız gerekecek. Burada inflater kullanarak View objemizi oluşturabiliriz.

permanent link

cevaplandı: 22 Ağu '12, 06:26

baran's gravatar image

baran
2.1k81939
cevap kabul oranı: 30%

Ben bunu hiç nesneler üzerinden düşünmeyi demememiştim. ListActivity'den örnek verdiğinizde anlar oldum. Teşekkür ederim.

Yalnız, hala, oluşturulan bir activity nesnesinin niçin yeri geldiğinde ListActivity'den, Activity'den, ActivityManager'dan veya Application'dan türetiliyor, sebebini bilmiyorum. Henüz Android'teki bu yapıyı oturtabilmiş değilim maalesef. Bunu başka bir soruda dillendirsem iyi olacak.

Tekrar teşekkürler.

(23 Ağu '12, 13:54) murtaza murtaza's gravatar image
1

Ayrıca, http://developer.android.com/guide/topics/ui/dialogs.html#CustomDialog adresinde de açıklayıcı bir örnek var.

(27 Eyl '12, 07:53) lastarabos lastarabos's gravatar image
Cevabınız
toggle preview

Bu soruyu takip et

E-Posta üzerinden:

Üyelik girişi yaptıktan sonra abonelik işlemlerini yapabilirsiniz

RSS üzerinden:

Cevaplar

Cevaplar ve Yorumlar

Yazı Formatlama

  • *italic* ya da _italic_
  • **bold** ya da __bold__
  • link:[text](http://url.com/ "başlık")
  • resim?![alt text](/path/img.jpg "başlık")
  • liste: 1. Foo 2. Bar
  • temel HTML etiketleri de kullanılabilir

Bu sorunun etiketleri:

×819
×6

Soruldu: 20 Ağu '12, 19:34

Görüntüleme: 3,503 kez

Son güncelleme: 27 Eyl '12, 07:53

powered by BitNami OSQA