Spinner‘ların ne olduğu ve nasıl çalıştıkları hakkında zaten bilgi sahibi oldunuz. Öyleyse bir örneğe bakalım ve onu Android Uygulamamızda nasıl uygulayabileceğimizi öğrenelim.
Bu eğitimde, bağımsız iki Spinner ile çalışan bir uygulama oluşturacağız. Uygulamanın ana düzeni, bir TextView ve alt bileşen görünümleri olarak iki Spinner içerecektir. Bu nedenle, bir Spinnerin TextView’un altına yerleştirildiği ve diğer spinnerin ilk spinnerin altına yerleştirildiği düzeni (aşağıdaki resimde gösterilen) özelleştirmemiz gerekiyor.
İkinci Spinner içindeki seçenekler, ilk Spinnerda ne seçtiğimize bağlı olacağından, başlangıçta ikinci spinner gizlenecek ve yalnızca kullanıcı ilk spinnerdan bir seçenek seçtiğinde görünecektir.
İkinci spinner , isVisible eşittir GONE özelliğine sahiptir; bu, düzende var olduğu, ancak görünür olmayacağı (veya gizleneceği) anlamına gelir.
Bu nedenle, aşağıdaki resimde, orada değil gibi görünüyor. Ancak orada olup olmadığını görmek için isVisible değerini VISIBLE olarak değiştirmeyi deneyebilirsiniz. Ama sonra şimdilik GONE olarak değiştirin.
İlk Spinner(classSpinner) kullanıcı tarafından seçilecek iller listesini ve bu seçime göre değerleri ikinci Spinner(divSpinner) a atayacağız. Kullanıcı ikinci spinner’dan da bir opsiyon seçtiğinde, bir Tost oluşturacağız ve seçilen değerleri ekranda görüntüleyeceğiz.
Öyleyse başlayalım, burada düzen XML dosyasına sahibiz. İsterseniz, yerel makinenizde bu örnekle başlamak için aşağıdaki XML’i kopyalayıp yapıştırın.
main_activity.xml
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 34 35 36 37 38 39 | <?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:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.tkodlama.MainActivity"> <TextView android:id="@+id/textView" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentStart="true" android:layout_alignParentTop="true" android:gravity="center" android:text="TASARIM KODLAMA" android:layout_alignParentLeft="true" /> <Spinner android:id="@+id/spinnerIller" android:layout_width="match_parent" android:layout_height="40dp" android:layout_below="@+id/textView" android:layout_marginTop="25dp" android:entries="@array/iller" /> <Spinner android:id="@+id/spinnerIlceler" android:visibility="gone" android:layout_width="match_parent" android:layout_height="40dp" android:layout_below="@id/spinnerIller" android:layout_marginTop="10dp" /> </RelativeLayout> |
NOT: Bunda bir hata alıyorsanız, bunun nedeni aşağıdaki veri XML dosyasını henüz oluşturmamış olmanızdır. Bunu oluşturduktan sonra, bu dosyadaki hata çözülecektir.
Gördüğünüz gibi, xml dosyası içinde bir kaç özelliğin yanı sıra bir TextView ve iki Spinner görünümüne sahibiz.
Spinner öğe eklemek için, ona bir dizi seçenek sunmanın iki olası yolu vardır. Bir dizi bildirerek ve içindeki öğeleri tanımlayarak. Ancak bu örnek için diğer yolu deneyeceğiz, yani bir XML kullanarak.
Aşağıda strings.xml dosyasında gösterdiğimiz gibi XML’de bir string dizisi tanımlayabiliriz. Android’de, strings.xml dosyamız gibi veri XML dosyalarını app → res → değerler → strings.xml içine koymalıyız.
string.xml
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 34 35 36 37 38 39 40 41 | <resources> <string name="app_name">Tasarım Kodlama</string> <string-array name="iller"> <item>İstanbul</item> <item>Ankara</item> <item>Edirne</item> <item>Konya</item> </string-array> <string-array name="ilceler_34"> <item>Bakırköy</item> <item>Esenler</item> <item>Bağcılar</item> <item>Beylikdüzü</item> </string-array> <string-array name="ilceler_06"> <item>Beypazarı</item> <item>Kızılcahamam</item> <item>Çankaya</item> <item>Polatlı</item> </string-array> <string-array name="ilceler_22"> <item>Enez</item> <item>Havsa</item> <item>İpsala</item> <item>Keşan</item> </string-array> <string-array name="ilceler_42"> <item>Beyşehir</item> <item>Bozkır</item> <item>Ahırlı</item> <item>Çeltik</item> </string-array> </resources> |
Şimdiye kadar, aşağıdaki şeylerle işimiz bitti:
- 1 TextView ve 2 Spinner‘a sahip olacak olan Android Uygulamamızda oluşturduğumuz tasarımı anladık.
- Kullanıcı arayüzü için layout XML’i tanımladık.
- Ayrıca Spinnerlar için veri setimizi tanımladık.
Veri kümemizde, öğeleri açılır listede görüntülemek için iller adlı string dizisi spinnerIller‘e atanacaktır.
Bu girişleri spinnere eklemek için tek yapmamız gereken, main_activity düzeni XML dosyasına android:entries="@array/iller" özelliğini eklemek. Bunu yapmak, iller dizisinde bulunan değerleri spinnerIllere atayacaktır.
Kullanıcının ilk spinnerdaki seçeneği seçmesine bağlı olarak, ikinci Spinner, ilk spinner seçimine dayalı seçeneklerle birlikte görünecektir. Kullanıcı, çalışma zamanında, yani dinamik olarak ilk açılır menüden seçeceği için bunu Java kodu aracılığıyla yapacağız.
GUI olaylarını işlemek için MainActivity.java dosyasının içindeki kodu uygulamamız gerekiyor. Her iki spinnerın örneklerini oluşturarak başlayacağız ve ardından her iki spinnera setOnItemSelectedListener() atayacağız.
MainActivity.java
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 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | package com.example.tkodlama; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.AdapterView; import android.widget.Spinner; public class MainActivity extends AppCompatActivity { Spinner spinnerIller,spinnerIlceler; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); spinnerIller = (Spinner) findViewById(R.id.spinnerIller); spinnerIlceler = (Spinner) findViewById(R.id.spinnerIlceler); spinnerIller.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) { } @Override public void onNothingSelected(AdapterView<?> adapterView) { } }); spinnerIlceler.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) { } @Override public void onNothingSelected(AdapterView<?> adapterView) { } }); } } |
Birinci Spinner değerine göre ikinci Spinner Değerini Değiştirme
spinnerIller‘in onItemSelected() metodunun içinde, açılır listeden seçilen öğeyi almanız ve bu değere bağlı olarak, string dizisi kaynağından spinnerIlceler‘e girişler, yani seçenekler atamanız gerekir. Aşağıdaki kodu spinnerIller‘in onItemSelected() yönteminin içine ekleyin.
MainActivity.java
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 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 | package com.example.tkodlama; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.Spinner; import android.widget.Toast; public class MainActivity extends AppCompatActivity { Spinner spinnerIller,spinnerIlceler; String seciliIl, seciliIlce; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); spinnerIller = (Spinner) findViewById(R.id.spinnerIller); spinnerIlceler = (Spinner) findViewById(R.id.spinnerIlceler); spinnerIller.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) { seciliIl = adapterView.getSelectedItem().toString(); switch (seciliIl) { case "İstanbul": spinnerIlceler.setAdapter(new ArrayAdapter<String>(MainActivity.this, R.layout.support_simple_spinner_dropdown_item, getResources().getStringArray(R.array.ilceler_22))); break; case "Ankara": spinnerIlceler.setAdapter(new ArrayAdapter<String>(MainActivity.this, R.layout.support_simple_spinner_dropdown_item, getResources().getStringArray(R.array.ilceler_06))); break; case "Edirne": spinnerIlceler.setAdapter(new ArrayAdapter<String>(MainActivity.this, R.layout.support_simple_spinner_dropdown_item, getResources().getStringArray(R.array.ilceler_22))); break; case "Konya": spinnerIlceler.setAdapter(new ArrayAdapter<String>(MainActivity.this, R.layout.support_simple_spinner_dropdown_item, getResources().getStringArray(R.array.ilceler_42))); break; } spinnerIlceler.setVisibility(View.VISIBLE); } @Override public void onNothingSelected(AdapterView<?> adapterView) { } }); spinnerIlceler.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) { } @Override public void onNothingSelected(AdapterView<?> adapterView) { } }); } } |
spinnerIllerden seçilen adın değerini alabiliriz. Bunun için apadapterView.getSelectedItem().toString() metodunu kullandık. Burada ebeveyn, spinnerIller görünümünün değeridir.
İlk açılır menüde sınıfın adını seçtikten sonra, ikinci açılır menüyü uygun değerlerle başlatmak için basit bir geçiş durumu kullanabiliriz.
Bir ArrayAdapter’ı ilgili string-array ile başlatacağız ve adaptörü ikinci spinner spinnerIlcelerimize yönlendireceğiz.
XML’deki dize kaynağından dize dizisine erişmek için getResources().getStringArray(ID_ARRAY) yöntemini kullanmamız gerekecek.
Ve sonunda, ikinci spinner visibility özelliğini VISIBLE olarak ayarlayacağız.
Seçilen değerleri göstermek için bir Toast oluşturma
Ardından, kullanıcı ikinci Spinner’dan bir seçenek seçtiğinde, bir Tost oluşturacağız ve seçilen değerleri ekranda görüntüleyeceğiz.
1 2 3 4 5 6 7 | seciliIlce = adapterView.getSelectedItem().toString(); String mesaj = String.format("Seçilen İl:%s ve Seçilen İlçe:%s",seciliIl,seciliIlce); Toast.makeText(getApplication(), mesaj, Toast.LENGTH_LONG).show(); |
Tüm MainActivity Kodları:
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 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 | package com.example.tkodlama; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.Spinner; import android.widget.Toast; public class MainActivity extends AppCompatActivity { Spinner spinnerIller,spinnerIlceler; String seciliIl, seciliIlce; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); spinnerIller = (Spinner) findViewById(R.id.spinnerIller); spinnerIlceler = (Spinner) findViewById(R.id.spinnerIlceler); spinnerIller.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) { seciliIl = adapterView.getSelectedItem().toString(); switch (seciliIl) { case "İstanbul": spinnerIlceler.setAdapter(new ArrayAdapter<String>(MainActivity.this, R.layout.support_simple_spinner_dropdown_item, getResources().getStringArray(R.array.ilceler_22))); break; case "Ankara": spinnerIlceler.setAdapter(new ArrayAdapter<String>(MainActivity.this, R.layout.support_simple_spinner_dropdown_item, getResources().getStringArray(R.array.ilceler_06))); break; case "Edirne": spinnerIlceler.setAdapter(new ArrayAdapter<String>(MainActivity.this, R.layout.support_simple_spinner_dropdown_item, getResources().getStringArray(R.array.ilceler_22))); break; case "Konya": spinnerIlceler.setAdapter(new ArrayAdapter<String>(MainActivity.this, R.layout.support_simple_spinner_dropdown_item, getResources().getStringArray(R.array.ilceler_42))); break; } spinnerIlceler.setVisibility(View.VISIBLE); } @Override public void onNothingSelected(AdapterView<?> adapterView) { } }); spinnerIlceler.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) { seciliIlce = adapterView.getSelectedItem().toString(); String mesaj = String.format("Seçilen İl:%s ve Seçilen İlçe:%s",seciliIl,seciliIlce); Toast.makeText(getApplication(), mesaj, Toast.LENGTH_LONG).show(); } @Override public void onNothingSelected(AdapterView<?> adapterView) { } }); } } |
Android uygulamanızı çalıştırdığınızda, ilk öğe zaten spinnera atanmış olduğundan varsayılan olarak ilk toast mesajını alacaksınız. Bunun için endişelenme. Sadece gidin ve birinci bölüm açılır menüleri için spinner seçimini değiştirmeye çalışın ve sonuçları aşağıdaki resimler gibi görmelisiniz.












Yorum Yap