AlertDialog ve ProgressDialog Kullanımı

Merhaba arkadaslar , bugün Android içerisinde yine sıkça kullanılan iki View nesnesinden bahsedicem .

Bunlar AlertDialog ve ProgressDialog olacak . Öncelikle bu iki View nesnesi hakkında biraz bilgi verelim .

  • AlertDialog : Bir işlem yaparken kullanıcaya son olarak işlemin gerçekleşmesi için onay istemek için kullanılır . Mesela bir dosya silmek yada bir dosya indirmek  ( ki bugün biz bunu yapıcaz ) gibi durumlarda kullanıcıya sunulan ve genellikle Evet/Hayır şeklinde gösterilen bir view nesnesidir .
  • ProgressDialog  : Arka planda herhangi uzun bir işlem yaparken kullanıcı sıkılmasın ve programın çalışıtıgı görsün diye ekranda işlem yapılıyor tarzında bir yapı gösteren ve bu yapıyı işlem sonunda işlem tamamlandı tarzı bilgi mesajı veren bir view nesnesidir .

* Evet arkadaslar kısaca bilgi verdikten sonra uygulamamıza bir göz atalım . Uygulamamızın senaryosu ; Layoutumuzda bulunan “Download” butonuna tıklandıgında ekrana “Dosya İndirme İşlemini Gerçekleştirmek İstiyormusunuz ? ” sorusunu yonelten bir AlertDialog kullacagız . Bu AlertDialog Evet/Hayır butonları olacak ve seçilen butona göre gerekli işlemleri yapıcaz . Evet seçilirse “İndirme başladı” diye bilgi gösterdikten sonra ProgressDialog^umuzu ekranda gösterip onu belli bir zaman aralıgı ile güncelleyecegiz . Hayır seçilirse “İndirme İptal Edildi ..” diye mesaj vericez . Hemen başlayalım ..

* Öncelikle activity_main.xml ile başlayalım ;

 

* Yukarda gördügünüz gibi arkadaslar , Layoutumzda bir TextView ve bir Button bulunmakta .

* Geçelim Java kodumuza , şöyle ki ;

 

* Şimdi sıra ile neler yaptık bir bakalım ;

 

  1. İlk olarak MAX_PROGRESS diye bir int sayı tanımladık. Bunu ProgressDialog üzerinde gösterecegimiz indirme yüzdesinin max değeri için kullanıcaz .
  2. Yine İndirme işleminde kullanıcıya bir msj ile verdik DIALOG_MESSAGE sayesinde .
  3. Java’daki random sınıfından bir nesne olusturduk . Bunu ProgressDialog’u güncellemede rastgele bir sayı üretmek için  kullanıcaz .
  4. Son olarak TextView , ProgressDialog ve Content nesnelerimizi olusturduk .

* Devam edelim ,

* Yukarıda random nesnemizi , butonumuzu ve textView nesnemiz ile iletişime geçtik . TextView nesnesi ile işimiz olmadıgında declare etmeyebilirdik de size kalmış birşey . Son olarak Download butonumuzun tıklanma olayını dinliyoruz . clickDownload arabirimi ile butonumuzun tıklandıgında neler yapmışız bir bakalım ;

 

 

* AlertDialog olayına burada giriyoruz arkadaslar , neler yaptık bir bakalım ;

  1. Öncelikle bir AlertDialog.Builder nesnesi olusturduk .
  2. Daha sonra setTitle() ile kullanıcıya soracagımız sorunun başlıgını belirledik .
  3. setMessage() ile sorumuzu ayarladık .
  4. Daha sonra gördügünüz gibi iki tane uzun method yazdık . Gözünüz korkmasın oldukça basitler .


    ile Positif ve Negatif butonlarımızı olusturduk . Bu methodlar 2 parametre almakta . İlk parametre Butonun text özelliği , ikinci parametre ise bu butonun tıklanma olayın dinleyen arabirim .
  5. Evet butonumuzun onClick olayına ise “İndirme başladı ” diye mesaj gosterdikten sonra dialogu ekrandan kaldıran dismiss() methodunu kullandık . Ve daha sonra İndirme işleminin yapılacağı methodu çağırdık .
  6. Hayır butonumuzun onClick olayında ise herhangi bir işleme kullanıcı izin vermediği için sadece “İndirme iptal edildi” mesajını verdik .

* Evet arkadaslar , Dialog alanımzdaki Evet butonuna basıldıgında İndirme işleminin gerçekleşeceği methodu çağırdık dedik . Şimdi ona bir bakalım ;

 

 

* Uzun gibi görünen ama aslında basit olan methodda ne yaptık bir bakalım ;

  1.  Öncelikle ProgressDialog nesnemizi olusturduk . Constructor da ise sınıfımızın Context bilgisini verdik .
  2. progressDialog.setMessage() ile indirme olayının mesajını ayarladık . Mesajımızı hatırlayacak olursak , şöyle idi : Arkanıza yaslanın ve indirmenin bitmesini bekleyin
  3. setCancelable(true); ile kullanıcın indirme işlemini iptal edebilmesine izin verdik . Eğer geri tuşuna basarsa progressDialog ekrandan kaybolacak.
  4. setMax() ile indirme çubugunun max boyutunu , setProgress() ile de başlangıç durumunu ayarladık .
  5. Methodu ile progressDialog stilimizi belirledik.
  6. Son olarak progressDialog^u show() methodu ile gösterdik .

* Gelelim progressDialog’umuzu güncelleme olayına, şöyle ki  ;

* Güncelleme olayında bir Thread yapısı kullandım  , farklı yolları da var . Handler ve Runnable yapısını kullanmak gibi .Bu daha basit gözüktüğünden bu şekilde yapmak istedim . Neler yaptık bir bakalım .

  1. ProgressDialogu güncellemek için bir int değeri tutuyoruz .
  2. run() methodunda ise bir try-catch yapısı mevcut . Bunu kullanmak zorundayız , Thread.sleep(1000); methodundan dolayı compiler bizi buna zorluyor. Bu checked exception türü oldugu icin bu tür işlemlerde try-catch yapısı kullanmak mecburiyetindeyiz . Unchecked exceptionlarda ise boyle bir zorlama yoktur . Neyse fazla girmeyelim bu konulara Java yazılarında bolca konusuruz bunları
  3. While döngüsünü status değermizin MAX_PROGRESS yani 100 den küçük oldugu sürece devam ettiriyoruz .
  4. Thread.sleep(1000) ile 1 sn aralıklarla ilerleme çuğumuzu güncelliyoruz .
  5. Bu iki method ile random olarak yeni üretilen sayıyı status’a ekliyor ve ilerleme çubuğumuzu güncelliyoruz .
  6. Bu arada random.nextInt(20) ile 0..19 arasında rastgele bir sayı alıyoruz arkadaslar .
  7. While döngüsünden çıktımızda son olarak ilerleme çubuğunu güncelliyoruz . Bunu örneğin şu durum için kullandım ;
    Status 95 oldugunda ve randomdan gelen sayı +5 oldugu için while dongumuz dışına çıkılacak ama kullanıcı ilerleme çubugunda 95/100 yazısını görücek . Bizde son olarak progress^i 100’e set ederek kullanıcıya net bilgi veriyoruz ve tekrar 1 sn bekleyerek bunun kullanıcı tarafından görünmesini sağlıyoruz .
  8. Catch bloğu içerisinde ise oluşan hatayı  handle ediyoruz . Catch bloğı içirisne bişey yazmadım şimdilik ama bu şekilde bırakmak tavsiye edilmez . Bunun için bizde Log kayıtları tutucaz uygulamamız için . Bu log’a catch’de yakaladgımız hatayı kayıt edicez . Bu sayede eğer uygulamamızda bir hata olursa log kaydından bu hatanın nereden kaynaklandığını anlayabilecez . Daha sonra Log kayıtları nasıl tutulur  , detaylı olarak değinicem insaAllah .
  9. Son olarak arkadaslar thread^ı start() ederek başlatıyoruz

* Yazımızın sonuna geldik arkadaslar , faydalı olması dileğiyle

* Kodların arasında kod olmayan bir iki söz dikkatinizi çekmiştir belki . Bunları notlarımın arasına alıyordum artık kodlarımın arasına alıcam . Bu düşünceyi zihnimde setVisible(true); eden Mert Çeltikoğlu^na teşekkürler  . Dileyen onlardan da istifade edebilir .

* Kaynak kodlar : AlertDialogAndProgressDialogExample

* Mutlu Kalın , Kod’la kalın ve bol bol Çay için …

* Birkaç çıktı verelim ;

2014-05-27 04:00:44

 

2014-05-27 04:01:152014-05-27 04:01:39

 

1497 Total Views 2 Views Today