Android Dersleri 10 : Costum (Özelleştirilmiş) Dialog Hazırlama



Bir önceki yazımda hatırlarsanız ListView oluşturmayı anlatmıştım. isteyenler burdan tekrar bakabilir. Bu bölümde oluşturduğumuz listView üzerindeki elemanların, Costum Dilog ile nasıl güncellendiğini göreceğiz.Güncellemek istediğimiz liste elemanına tıkladığımızda, bir tane dialog penceresi açılacak ve bu açılan penceredeki metin kutusuna yazdığımız kelime, tıkladığımız elemanın yerine geçecek. Oldukça basit bir durum. Aşağıdaki gibi:
Bunun için öncelikle bir dialog penceresi tasarımı yapmamız gerekiyor.Yeni bir layout oluşturalım ve içini aşağıdaki gibi dolduralım :
?
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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >
        <ImageView
            android:id="@+id/imageView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/ic_launcher" />
        <TextView
            android:id="@+id/textView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Güncellemek istediğiniz kelimeyi giriniz!"
            android:textAppearance="?android:attr/textAppearanceMedium" />
    </LinearLayout>
    <EditText
        android:id="@+id/GuncelleEdttxt"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ems="10" >
        <requestFocus />
    </EditText>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >
        <Button
            android:id="@+id/guncelleBtn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="Güncelle" />
        <Button
            android:id="@+id/iptalBtn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="iptal" />
    </LinearLayout>
</LinearLayout>
Burda yaptığımız şey kısaca şudur : -Öncelikle bir tane image ekledik. Dialog penceresi açıldığında görünmesi için buraya isteğe bağlı bir resim koyabilirsiniz. Biz şimdilik var olan resmi seçiyoruz. - Sonra bi tane TextView ekledik . Burda kullanıcıya yapması gereken işlemi belirtiyoruz. -Daha sonra bir tane Edittext ekledik. Burda ise güncellemek istediği liste elemanı yerine ne yazmak istiyorsa onu girebilir. -Son olarak 2 tane button ekledik. "Güncelle" butonuna tıkladığımızda Edittext'e girdiğimiz değeri, seçtiğimiz liste elemanı ile değiştireceğiz. "iptal" butonuna bastığımızda ise Dialog penceresini kapatmış olacağız. Yukarıdaki kodu yazdıktan sonra aşağıdaki ekranı Graphical Layout sekmesinden görebiliriz.
 
Bunu yaptıktan sonra MainActivity.java class'ımızı açalım ve içini aşağıdaki gibi dolduralım:
İlk olarak bir tane dialog penceresi için ekran tasarımı yaptık. -Bunun nasıl olduğunu yukarıda anlattım. Şimdi yaptığımız olay liste elamanlarının tıklanabilir olmasını sağlamak. Bunun içinlist.setOnItemClickListener() mehodunu kullanıyoruz.  Methodun içine de tıkladıktan sonra ne yapılmasını istiyorsak onları yazıyoruz. Biz dialog penceresinin açılmasını istedik. Şimdi yaptığımız şeyleri kısaca özetleyelim; 1-  Öncelikle seçtiğimiz elemanın indexini tutmak için bir değişken oluşturduk ve değerin -1 yaptık. İndex tutmak ne demek ? Hatırlarsanız bir önceki dersimizde liste elemanlarını String tipinde bir dizi'ye atamıştık . İndex tutmayı, tıkladığımız liste elemanının bu dizideki sıra numarasını gösteren sayı olarak düşünebiliriz. 2- Burda yaptığımız, tıkladığımız liste elemanının index numarasını, oluşturduğumuz "secilen_item" değişkenine atıyoruz. 3-) Son olarak dialog penceresini oluşturduğumuz methodu çağırıyoruz. Kodumuz biraz karışık gibi durabilir .O yüzden parça parça anlatacağım. Öncelikli olarak dialog ekranının oluşturulması:
 
1-) İlk olarak dialog ekranı için bir  View oluşturuyoruz. Bunu yaparken LayoutInflater kullanıyoruz . Yukarıda gördüğünüz gibi inflater oluşturun. Daha sonra bu inflater ile oluştuduğumuzdialog_penceresi.xml'e ulaşıyoruz ve bunu View tipinde layout değişkenine atıyoruz. 2-) Burda builder adında bir tane AlertDialog oluşturuyoruz. 3-) Burda yaptığımız olay, Dialog penceresi için oluşturduğumuz dialog_pencere.xml layoutundaki ekran görsellerine ulaşmak.-GuncelleBtn ve iptalBtn adında 2 tane buton, guncelleEdttxt adında bir tane Edittext. Sıradan bir button uygulamasında yapılandan pek bir farkı yok. Tek farkı burda oluşturduğumuz ekran görselleri farklı bir xml dosyasında olduğu için "layout.findViewbyId();"şeklinde ulaşıyoruz. Layout'u zaten yukarıda oluşturmuştuk. 4-)  En önemli işlemi de burda yapıyoruz. Oluşturduğumuz builder  adındaki AlertDialog'a bu layoutnesnesini set etmemiz gerekiyor. Bunun içinde yukarıdaki kodu kullandık. 5-) Son olarak Dialog penceresini oluşturup göstermeye geldi.  Oluşturmak için create(), göstermek için de show() methodlarını kullanıyoruz.
Programımız şu hali ile çalışır durumda. Ama dikkat ettiyseniz Güncelle ve İptal butonlarına tıkladığımızda ne olacağı hakkında birşey yazmadık Yani butonlar çalışır durumda değil . Bunun için aşağıdaki kodları setDialogCalistir() methodunun devamına ekleyelim:
Güncelle butonuna tıkladığımızda program, setOnClickListener methodunu arayacak ve içindeki kodu sırasıyla okuyacaktır. Yukarıda anlattığım secilen_item değişkenini hatırlayın. Buna, tıkladığımız liste elemanının index numarasını atamıştık. liste[secilen_item] şeklinde yazarsak, o indexte bulunan kelimeyi elde ederiz. Ama bizim yapmak istediğimiz Edittexte yazdığımız kelimeyi, bu indexteki kelimenin yerine atamak. Yani Edittexte yazdığımız kelime, tıkladığımız liste elamanı olacak. Bunu yaptıktan sonra guncelleEdtxt.setText(""); ile Edittextimizin içini temizliyoruz. Listede yaptığımız değişiklikten adapter'ımızı haberdar etmek zorundayız bunun içinadapter.notifyDataSetChanged(); kodunu kullanıyoruz.Sonra Dialog penceremizi kapatıp, Toast mesajı ile işlemimizin gerçekleştiğini belirmek için ekrana bir Toast mesajı yazıyoruz. İptal Butonuna tıkladığımızda ise Dialog penceremizin kapanmasını istiyoruz. Bunun için yapmamız gereken oldukça basit. dialog.cancel(); methodunu yazmamız yeterli. Dialog değimiz nesne yukarıda oluşturduğumuz  dialog nesnesidir. İsternesiz builder.create().cancel(); de yazabilirsiniz. Programımız hazır aşağıdaki gibi çalışacaktır.
 
Google Plus ile Paylaş

Kısaca: seymanblog

Panelde şablon düzenle deyip, bu satırı aratarak buraya kısaca hakkımda yazısı yazabilirsiniz.
    BLOGGER YORUMLARI
    FACEBOOK YORUMLARI

0 yorum:

Yorum Gönder