Android Studio programında tasarım ekranında kullanılan nesnelere java tarafında ulaşmak için bir kopyasını alıp oluşturmanız gerekir. Bu tip tanımlama işlemlerine DataBinding denir. Tasarım kısmında az nesne kullanıldığında kullanılabilir. Ancak nesnenin sayısı çoğaldığında java tarafından hem kod fazlalığı oluşacak hem de programın okunurluğu azalacaktır. Google tasarım kısmında tanımlı tüm nesnelere java tarafında tanımlama yapmadan ulaşmak için ViewBinding yöntemini geliştirmiştir. Bu yöntemle java tarafında herhangi bir tanımlama yapmanıza gerek kalmadan tüm nesnelere ulaşabilirsiniz. Bu uygulamamızda ViewBinding yöntemini kullanarak mevsimlere ait resimleri ve ayları görüntüleme işlemini gerçekleştireceğiz.
Android Studio programını açalım.
İsmi SeasonsList olan yeni bir proje oluşturalım.
Kurulumu kontrol etmek ve emülatörü yüklemek için projeyi çalıştıralım.
Uygulama başlıklarını ve sabit değerlerin belirlendiği işlemler için strings.xml dosyasını düzenleyelim.
<resources>
<string name="app_name">Mevsimler</string>
<string name="previous">GERİ</string>
<string name="next">İLERİ</string>
</resources>
activity_main.xml dosyasını aşağıdaki gibi düzenleyelim.
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="40dp"
android:layout_marginTop="48dp"
android:textSize="30sp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<ImageView
android:id="@+id/imageView"
android:layout_width="326dp"
android:layout_height="296dp"
android:layout_marginStart="36dp"
android:layout_marginTop="116dp"
android:scaleType="fitXY"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:srcCompat="@tools:sample/avatars" />
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="40dp"
android:layout_marginTop="376dp"
android:textSize="25sp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@+id/imageView" />
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="36dp"
android:layout_marginBottom="56dp"
android:onClick="previous_Click"
android:text="GERİ"
android:textSize="25sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent" />
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="36dp"
android:layout_marginBottom="56dp"
android:onClick="next_Click"
android:text="İLERİ"
android:textSize="25sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
Projede kullanılacak resim dosyalarını internetten indirelim. Ya da resimlere buradan ulaşabilirsiniz. Resimlere ilkbahar.jpg, yaz,jpg, sonbahar.jpg, kis.jpg isimlerini verelim. İsimlerin uzun ve karmaşık olmamasına dikkat edelim. Türkçe kararkter asla kullanmayalım. Resim dosyaları res klasörü altında drawable klasörüne taşıyalım. Taşıma işlemi yapılırken -v24 isimli klasör oluşturabilir. Bu klasörü silelim.
Gradle Scripts altındaki build.gradle (Module) dosyasını açınız ve android blokları arasına girerek viewBinding etkinleştirmek için gereken şu kodu ekleyiniz. Eğer buildFeatures bloğu varsa sadece viewBinding satırını ekleyiniz.
buildFeatures{
viewBinding true;
}
MainActivity içine dönerek MainActivity sınıfının blokları arasına giriniz ve “private Bindig” yazınız. Öneriler arasında gelen “private ActivityMainBinding”e tıklayınız ve boşluk bırakıp, binding yazarak değişkenin adını tanımlayınız.
private ActivityMainBinding binding;
MainActivity sınıfındayken onCreate yaşam döngüsüne giriniz ve “setContentView(R. layout.activity_main);” kodunu siliniz. Aynı blok içinde “super.onCreate(savedInstanceState);” kodunun altına geliniz ve şu kodları ekleyiniz:
binding = ActivityMainBinding.inflate(getLayoutInflater());
View view = binding.getRoot();
setContentView(view);
java klasörü altındaki paket ismine sağ tuş ile tıklayarak yeni bir sınıf oluşturunuz. Sınıfa “Mevsim” ismini veriniz. Bu sınıfta hem görseller hem de görsellerin bilgileri tutulacaktır. Açılan sınıf içine bir adet String veri tipinde “bilgi” isimli değişken, bir adet int veri tipinde “siraNo” isimli bir değişken bir de “int” veri tipinde “foto” isimli bir değişken tanımlayınız.
public class Mevsim {
String bilgi;
int siraNo;
int foto;
}
Resimleri tutacağınız foto isimli değişkenin int olmasının nedeni, drawable klasörüne atılan görsellerin her birine aslında birer “id” verilmesinden kaynaklanır. Bu numaralara MainActivity’deki onCreate metodu içinde “R.drawable.” yazılırsa erişilebilir. Resimlere ait id’ler bu sınıf içinde tutulur.
Mevsim sınıfının içine bir constructer oluşturunuz. Constructer, bir sınıf çağrıldığında ilk olarak çalıştırılacak metottur. Kodlarınızı şu şekilde yazınız:
public Mevsim(String bilgi, int siraNo, int foto) {
this.bilgi = bilgi;
this.siraNo = siraNo;
this.foto = foto;
}
MainActivity.java sınıfının içine dönünüz. onCreate metodu içinde resimleri ve bilgileri sınıf üzerine ekleyiniz. Kodları şu şekilde yazınız:
Mevsim ilkbahar = new Mevsim("Mart, Nisan, Mayıs", 1, R.drawable.ilkbahar);
Mevsim yaz = new Mevsim("Haziran, Temmuz, Ağustos", 1, R.drawable.yaz);
Mevsim sonbahar = new Mevsim("Eylül, Ekim, Kasım", 1, R.drawable.sonbahar);
Mevsim kis = new Mevsim("Aralık, Ocak, Şubat", 1, R.drawable.kis);
Tanımlamalardan sonra bu verileri bir ArrayListe yüklemek gerektiğini unutmayınız. Bunun için onCreate metodunun dışına çıkıp, onCreate metodunun üzerinde fakat MainActivity blokları arasında olacak şekilde “ArrayList<Mevsim> mevsimler;” yazarak Mevsim sınıfından türetilen nesneleri tutacak mevsimler isimli bir ArrayList tanımlayınız. Ayrıca mevsim isimlerini tutacak String tipinde liste dizisini ve elemanlarını tanımlayınız. String[] liste = {"İlkbahar", "Yaz", "Sonbahar", "Kış"};.Tekrar onCreate içine girerek bu ArrayListi “mevsimler = new ArrayList<>();” kodlarını yazarak başlatınız. Mevsim sınıfından oluşturulan nesnelerin altında olacak biçimde de bu ArrayListe verileri gönderiniz. Kodları şu şekilde yazınız:
mevsimler.add(ilkbahar);
mevsimler.add(yaz);
mevsimler.add(sonbahar);
mevsimler.add(kis);
Uygulama açılır açılmaz ilk mevsim olan ilkbahar adını textview nesnesine, resmi imageView üzerinde, ilk kayda ait bilginin de textView ekranında görünmesi için onCreate blokları arasında şu kodları yazınız:
binding.textView2.setText(liste[0]);
binding.imageView.setImageResource(mevsimler.get(0).foto);
binding.textView.setText("Aylar :\n" + mevsimler.get(0).bilgi);
Ardından buttona tıkladıkça sıra numaralarını tutması için MainActivityde int veri tipinde mevsimNo isminde bir değişken tanımlayınız ve değişkenin değerini onCreate içinde 0 olarak atayınız.
mevsimNo = 0;
MainActivity.java dosyası içinde MainActivity sınıfı blokları arasına onCreate metodundan çıkarak “previous_Click” ve “next_Click” metotlarını hazırlayınız. Görünüme tıklandığı zaman çalışacağı için metotlar, View sınıfından v nesnesi şeklinde bir adet parametre alacaktır. Metotlar içinde mevsimNo değerini “previous_Click” metodunda 1 azaltıp “next_Click” metodunda 1 artırınız. Bu değişken sayesinde hangi ArrayList bilgisinin getirileceği bilinir. Ayrıca içeride birer kontrol kodu yazarak 0’dan büyük olmamasını veya ArrayListin eleman sayısından büyük olmamasını kontrol ediniz. “previous_Click” metodu için kodlar şu şekildedir:
public void previous_Click(View v) {
if (mevsimNo > 0) {
mevsimNo--;
binding.textView2.setText(liste[mevsimNo]);
binding.imageView.setImageResource(mevsimler.get(mevsimNo).foto);
binding.textView.setText("Aylar :\n" + mevsimler.get(mevsimNo).bilgi);
}
}
“next_Click” metodu için kodlar şu şekildedir:
public void next_Click(View v) {
if (mevsimNo < mevsimler.size() - 1) {
mevsimNo++;
binding.textView2.setText(liste[mevsimNo]);
binding.imageView.setImageResource(mevsimler.get(mevsimNo).foto);
binding.textView.setText("Aylar :\n" + mevsimler.get(mevsimNo).bilgi);
}
}
Uygulama çalıştırıldığında aşağıdaki görüntü elde edilir.

|