Anasayfa » Android, Java ve Java Teknolojileri

Android Programlama – ListView, Spinner, AutoCompleteTextView, Adapter

2 Temmuz 2012 5.200 kez okundu Yorum yok
1 Star2 Stars3 Stars4 Stars5 Stars (1 oy,5 üzerinden : 5,00 )
Loading ... Loading ...

Merhaba arkadaşlar, bu yazımızda daha önceki yazımızda geliştirdiğimiz form uygulamasını biraz daha geliştireceğiz. Bu uygulamamızda bir önceki uygulamaya listview ekleyeceğiz. Bir önceki yazımızı okumayanlar buradan okuyabilir.  Okumak istemeyenler bir önceki uygulamayı indirip üzerinde devam edebilirler.

Bu uygulamamızda model dosyamızı geliştireceğiz ve liste tutabilecek hale getireceğiz. Böylece tek bir kitap tutmak yerine kitap listesi tutan bir yapı elde edeceğiz. Ardından Programımızın  ana ekranına bir listView ekleyerek model dosyamızda bulunan kitapların listesini kullanıcıya göstereceğiz. Bu uygulamamızda sadece kitapları kullanıcıya sunacağız. Herhangi bir değiştirme ve silme işlemi yapmayacağız. Bu işlemleri daha sonraki yazılarımızda ele alacağız.

Ana activity dosyamızda bulunan

Book  b = new Book();

yerine

List<Book> books = new ArrayList<Book>();

yazıyoruz. Böylece kitapların listesini tutabileceğiz.

Bu noktadan sonra

Book  b = new Book();

kodunu local olması için onClick(View v){} fonksiyonu içine alıyorum. Yani  fonksiyonumuz şu hale geliyor.

public void onClick(View v) {
			//local olması için buraya taşıdık.
			Book  b = new Book();
			EditText name =  (EditText)findViewById(R.id.name);
			EditText author = (EditText)findViewById(R.id.author);
 
			b.setName(name.getText().toString());
			b.setAuthor(author.getText().toString());
 
			RadioGroup types=(RadioGroup)findViewById(R.id.types);//radio buttonlardan seçeneği alıyoruz
 
			//aldığımız seçenği switch ile ilgili şekilde kaydediyoruz.
			switch (types.getCheckedRadioButtonId()) {
			case R.id.adventure:
				b.setType("adventure");
				break;
			case R.id.biography:
				b.setType("biography");
				break;
			case R.id.documentary:
				b.setType("documentary");
				break;
			}
		}

Bu haliyle tabiki kitabımızı elde tutamıyoruz. Çünkü scope dışına çıkıldığında değişkeni kaybediyoruz. Bu hatayı birazdan listeye ekleyerek halledeceğiz ancak öncelikle book classımıza toString() fonksiyonu ekleyeceğiz ki listView üzerinden kitaplarımızı çağırabilelim.

Book.java dosyamız şu hale geliyor.

package kodmerkezi.net.basitForm;
 
public class Book {
	private String name="";
	private String author="";
	private String type="";
 
	public String getType() {
		return type;
	}
	public void setType(String type) {
		this.type = type;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getAuthor() {
		return author;
	}
	public void setAuthor(String author) {
		this.author = author;
	}
	//ListView içerisinden çağrılırken kullanacağız
	public String toString() {
		return(getName());
	}
 
}

Şimdi geldik püf noktaya, Layout üzerine ListView ekleyeceğiz. Biz şöyle yapacağız. Formumuzun üzerinde kitaplarımızın listesi görünecek. Bunun için main.xml dosyamızda şöyle değişiklikler yapıyoruz.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TableLayout android:id="@+id/details"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:stretchColumns="1"
>
<TableRow >
	<TextView
	android:layout_width="wrap_content"
	android:layout_height="wrap_content"
	android:text="İsmi:"
	/>
	<EditText android:id="@+id/name"
	android:layout_width="fill_parent"
	android:layout_height="wrap_content"
	/>
	</TableRow>
<TableRow >
	<TextView
	android:layout_width="wrap_content"
	android:layout_height="wrap_content"
	android:text="Yazar:"
	/>
	<EditText android:id="@+id/author"
	android:layout_width="fill_parent"
	android:layout_height="wrap_content"
	/>
</TableRow>
<TableRow>
	<TextView android:text="Cinsi:" />
	<RadioGroup android:id="@+id/types">
	<RadioButton android:id="@+id/adventure"
	android:text="Adventure"
	android:checked="true"
	/>
	<RadioButton android:id="@+id/biography"
	android:text="Biography"
	/>
	<RadioButton android:id="@+id/documentary"
	android:text="Documentary"
	/>
	</RadioGroup>
</TableRow>
	<Button android:id="@+id/save"
	android:layout_width="fill_parent"
	android:layout_height="wrap_content"
	android:text="Kaydet"
	/>
</TableLayout>
<ListView android:id="@+id/books"
	android:layout_width="fill_parent"
	android:layout_height="wrap_content"
	android:layout_alignParentTop="true"
	android:layout_above="@id/details"
/>
</RelativeLayout>

Burada bütün elemanlarımızı RelativeLayout içerisine aldık. Böylece hangi elemanın nerede duracağına rahatlıkla müdahele edebileceğiz. Yani mesele listview, tableLayoutun üzerinde olsun gibi komutlar yazabileceğiz. ScrollView elemanını kaldırdık, ve TableLayoutun yüksekliği için android:layout_height=”wrap_content” yazdık. Böylece yüksekliği içeriğine göre kendisi ayarlayacak. En altta ListView ekledik ve yine aynı şekilde yüksekliğini android:layout_height=”wrap_content” şeklinde ayarladık. Ancak android:layout_above=”@id/details” komutu ile listView elemanımız “details” id li yani TableLayout umuzun üzerine konuşlanacak.

Şimdi ise boş olan ListView elemanımızı kaynağa bağlamamız gerekiyor. Bunun için ArrayAdapter tanımlayacağız ve listemiz ile bağlayacağız.Yeni elemanları adapter.add() şeklinde ekledikçe yeni eklenen elemanlar hem listemize eklenecek hemde ekranda görünecek. Buraya dikkat etmemiz gerekir.Elemanları direk olarak listeye eklersek adaptör bunu anlayamaz ve ekranda göremeyiz.

package kodmerkezi.net.basitForm;
 
import java.util.ArrayList;
import java.util.List;
 
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.RadioGroup;
 
public class BasitFormActivity extends Activity {
 
 
	//Kitapları Liste halinde tutacağımız için ArrayList cinsinde tanımlıyoruz
	List<Book> books = new ArrayList<Book>();
	//ListView ile bağlantıyı kuracak adaptörümüz
	ArrayAdapter<Book> adapter=null;
 
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
 
        //dinamik olarak java kodlarıyla radio button ekleme
        // RadioGroup radioGroup =(RadioGroup)findViewById(R.id.types);        
        // RadioButton rb = new RadioButton(getBaseContext());
        // rb.setText("Other");
     	//radioGroup.addView(rb);
 
        Button save = (Button)findViewById(R.id.save);
        save.setOnClickListener(onSave);
        //main.xml dosyamızdaki listView e erişim sağlıyoruz
        ListView list=(ListView)findViewById(R.id.books);
        //adaptörümüzü yaratıyoruz.İlk eleman bulunduğumuz sınıfı işaret ediyor
        //2. eleman listView satırlarımızın temasını ifade ediyor.simple_list_item_1 temasına göre sadece beyaz bir yazı gelecek her satırda
        //3. eleman Listemizi gösteriyor
        adapter = new ArrayAdapter<Book>(this,
        		android.R.layout.simple_list_item_1,
        		books);
        //ListView ile adaptör bağlantısını sağlıyoruz
        list.setAdapter(adapter);
    }
 
    private View.OnClickListener onSave = new View.OnClickListener() {
 
		public void onClick(View v) {
			//local olması için buraya taşıdık.
			Book  b = new Book();
			EditText name =  (EditText)findViewById(R.id.name);
			EditText author = (EditText)findViewById(R.id.author);
 
			b.setName(name.getText().toString());
			b.setAuthor(author.getText().toString());
 
			RadioGroup types=(RadioGroup)findViewById(R.id.types);//radio buttonlardan seçeneği alıyoruz
 
			//aldığımız seçenği switch ile ilgili şekilde kaydediyoruz.
			switch (types.getCheckedRadioButtonId()) {
			case R.id.adventure:
				b.setType("adventure");
				break;
			case R.id.biography:
				b.setType("biography");
				break;
			case R.id.documentary:
				b.setType("documentary");
				break;
			}
 
			//adaptöre yeni elemanı ekliyoruz.
			adapter.add(b);
		}
 
	};
}

Şimdi bir kaç örnek kitap ekleyelim.

Eğer ListView yerine Spinner(dropDown Menü) kullanmak istersek bir kaç noktayı değiştirmemiz gerekecek. İlk olarak main.xml dosyasında ListView yerine şunu koyacağız.

<Spinner android:id="@+id/books"
	android:layout_width="fill_parent"
	android:layout_height="wrap_content"
	android:layout_alignParentTop="true"
	android:layout_above="@id/details"
/>

Daha sonra Ana activity dosyamızda ListView yerine şu satırı koyacağız,

Spinner list=(Spinner)findViewById(R.id.books);
 dapter = new ArrayAdapter<Book>(this,
        		android.R.layout.simple_spinner_item,
        		books);

Ekran görüntümüz bu hali alacak.

Son olarak kitap yazarlarımızı AutoComplete yapalım. Yani yazar ismi girilmeye başlandığında tahminler gözüksün.

Bunun için ilk olarak yazar ismini girdiğimiz editText elemanını AutoCompleteTextView e çeviriyoruz.

<AutoCompleteTextView android:id="@+id/author"
	android:layout_width="fill_parent"
	android:layout_height="wrap_content"
	/>

Daha sonra Activity içerisinde String arrayi ile yazar isimlerini giriyorum.Bunu onCreate metodunun hemen üzerinde yapıyorum.

 private static final String[] AUTHORS = new String[] {
         "Gurcan Kavakçı", "Mehmet S.", "Ali T.", "Hasan G.", "Saffet C."
     };

Son olarak bu isimleri AutoCompleteTextView e adaptör yardımıyla bağlıyorum.

ArrayAdapter<String> adapter_author = new ArrayAdapter<String>(this,
                android.R.layout.simple_dropdown_item_1line, AUTHORS);
        AutoCompleteTextView textView = (AutoCompleteTextView)findViewById(R.id.author);
        textView.setAdapter(adapter_author);

Böylece yazar ismi girmeye başladığımızda tahminler altta çıkmaya başlıyor.

Bu yazımızda genel olarak listView, Spinner,Adaptor,AutoCompleteTextView lerden bahsettik. Sonraki yazılarımda bunları geliştirmeye devam edeceğiz. Takipte kalın!

Projenin kaynak kodlarını buradan indirebilirsiniz. Rar şifresi: www.kodmerkezi.net

<<< Önceki:

Sonraki: >>>


Facebookta Paylaş

Yorum Bırakın!

Yorum yaz, yada kendi sitende trackback (Geri besleme) olarak ekle. Ayrıca RSS ile bu konuya üye olabilirsin. .

Nazik olun. Temiz tutun. Konu dışına çıkmayın. Spam yaratmayın.

Bu tagları kullanabilirsiniz:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Bloğumuz gavatarı desteklemektedir. Kendi gavatarınızı edinmek için lütfen Gravatar a üye olun.