Bu derste daha önceden de bahsettiğimiz LayoutInflater sınıfını adım adım öğretmeye çalıştım.
Bu konu kişisel adaptör kullanarak listview oluştururken çok işimize yaracağı için önemli. Lütfen anlamadığınız yerleri sormaktan çekinmeyin.
Layoutinflater sınıfı temel olarak XML objeleri Java sınıflarına çevirir. Çok zaman alan ve kaynak tüketen bir işlemdir. XML view’ları alır, ilgili java objeleri yaratılır, bunlara ilgili özellikler eklenir ve tüm bu işlemler her bir eleman için recursive olarak yapılır.
Layoutinflater’dan nesne üretirken getSystemService veya getLayoutInflater metholarından faydalanırız.
inflate() methodu geriye bir view dönderir. Bu methodun ilk parametresine javaya çevrilmesini istediğimiz layoutu, ikinci parametresine bu layoutu eklemek istediğimiz layout öğesinin ID’sini, üçüncü parametresine de 2. parametre olarak verdiğimiz ve inflate edilen viewın parent’ı olan view’e eklenip eklenmeyeceği bilgisini true ya da false olarak veririz.
İlgili tüm methodların anlatıldığı bu video bundan sonraki anlatılacak çoğu konu için önemli, yüzden lütfen anlamadığınız yerleri sorun.
2. bölümden sonraki uygulama dosyaları şu şekilde:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
public class MainActivity extends AppCompatActivity { RelativeLayout relative; LinearLayout linear; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); relative= (RelativeLayout) findViewById(R.id.activity_main); linear= (LinearLayout) findViewById(R.id.my_linear_layout); // LayoutInflater lif=getLayoutInflater(); LayoutInflater lif= (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); //View v=lif.inflate(R.layout.sublayout, relative); // View v=lif.inflate(R.layout.sublayout, relative,true); //Yukarıdaki iki satır kodun yaptığı iş aynıdır. Farklılık true yerine false yazdığımızda ortaya çıkar. //false yazıldıgında sublayout, örneğimizde relative olarak belirlediğimiz view öğesine eklenmez ama onun Layoutparams özelliklerini kullanır. //relative.addView(v); View v=lif.inflate(R.layout.sublayout, linear, false); linear.addView(v); } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:background="#ff0" tools:context="emrealtunbilek.com.layoutinflaterornek.MainActivity"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/my_linear_layout" android:background="#00f" > </LinearLayout> </RelativeLayout> |
1 2 3 4 5 6 7 8 9 10 11 |
<?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/textView" android:text="emre altunbilek" android:background="#f0f" android:textAppearance="?android:attr/textAppearanceLarge" > </TextView> |