AlertDialog
AlertDialog sınıfı bir dialog penceresi oluşturmaya yarayan bir sınıftır. Toast sınıfından farklı olarak bu sınıf kullanıcıyla doğrudan etkileşim halindedir.AlertDialog sınıfı diğer sistemlerde .Net'teki MessageBox
Swing içerisindeki JoptionPane
penceresine benzemektedir.
AlertDialog sınıfı türünden bir nesne yaratmak için AlertDialog.Builder
sınıfı kullanılmalıdır. Bu sınıf türünden nesne için çeşitli belirlemeler yapılarak create
isimli metod çağrılır ve nesne yaratılır.AlertDialog.Builder
sınıfının constructoru hangi activity için AlertDialog oluşturulacağını bildirmektedir.
24NISAN
AlertDialog.Builder sınıfının metodları aynı referansa geri dönmektedir.Dolayısıyla bu metodlar zincir (fluent) halinde geri dönmektedir.
AlertDialog penceresinin genel olarak 3 bölümü vardır.
- Title
- Content Area
- Buttons
Bir başlığı bir de üzerindeki mesaja ilişkin yazı olan bir AlertDialog aşağıdaki gibi yaratılabilir:
AlertDialog.Builder builder = new AlertDialog.Builder(this);
AlertDialog dlg = builder.setTitle("Uyarı").setMessage("Bu bir uyarıdır").create();
dlg.show();
Burada setTitle
ve setMessage
metodları ve diğer tüm String parametreli metodlar argümanlarını String kaynağından da alabilirler.Buna ilişkin int türünden parametreli versiyonları da bulunmaktadır.
Dialog pencerisin butonları negative positive ve neutral olarak ayrılmaktadır.Positif buton genel olarak kabul etme amaçlı , Negatif buton da red etmeyi temsil etmektedir.Nötr buton ise genel durumlu bir buton ve ya iptal işlemi için düşünülmüştür.
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setPositiveButton(R.string.alertposbutton, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(getBaseContext(), "Evet", Toast.LENGTH_SHORT).show();
}
});
builder.setNegativeButton(R.string.alertnegbutton, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(getBaseContext(), "Hayır", Toast.LENGTH_SHORT).show();
}
});
builder.setNeutralButton(R.string.alertneutbutton, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(getBaseContext(), "İptal", Toast.LENGTH_SHORT).show();
}
});
AlertDialog dlg = builder.setTitle(R.string.alerttitle).setMessage(R.string.alertmessage).create();
dlg.show();
AlertDialog sınıfına ilişkin pencereye bir liste eklenebilir.Bunun için setItems
metodları kullanılmalıdır. setItems
metodlarının ilgili listede gözükecek yazıya ilişkin bir yazı olan ve dizi kaynağı olan parametereli versiyonları bulunmaktadır.
Anahtar Notlar : Java kütüphanesi ve android kütüphanesinde charSequence isimli bir arayüz bulunmaktadır.Bu arayüz char türden dizilimler için genel amaçlı kullanımlar için düşünülmüştür.Char türden dizilimler; char türden diziler String türünden işlemler için düşünülmüştür.
String sınıfı da Charsequence arayüzü implemente etmiş bir sınıftır.
setItem
metodu AlertDialog
penceresinin Content bölümüne ekleme yapar.
setItem
metoduyla eklenen elemanin click işlemine ilişkin kod şöyle kurgulanabilir.
public void onClick(DialogInterface dialog, int which) {
ListView lv = (ListView) ((AlertDialog) dialog).getListView();
Toast.makeText(getBaseContext(), lv.getItemAtPosition(which).toString(), Toast.LENGTH_LONG).show();
}
onClick
metodunun dialog türünden parametresi bu metod için AlertDialog türünü dinamik olarak göstermektedir.Bu durumda programcı downCasting yaparak AlertDialog türüyle çalışabilir.
Burada diğer bir yöntem eklenen diziye erişmektir.Şüphesiz bunun için dizinin uygun şekilde erişilebilecek şekilde tasarımı yapılmalıdır.
Programcı isterse ContentArea bölümüne eklenen listeyi "Checkable" yapabilir.Bunun iiçin setSingleChoiceItem
ve ya setMultiChoiceItems
metodlarını çağırabilir
[DROPBOX]056-AlertDialogMultiChoice
ListView içerisinde dolaşım yapmak için SpareBooleanArray
ya da aşağıdaki gibi bir kullanım tercih edilebilir.
chehkedTextView
ve ya AppCompatCheckedTextView
kullanılabilir.
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
ListView lv = ((AlertDialog) dialog).getListView();
String str = "";
for (int i = 0; i < lv.getChildCount(); ++i) {
CheckedTextView chk = (CheckedTextView) lv.getChildAt(i);
if (chk.isChecked()) {
if (!str.equals(""))
str += ",";
str += chk.getText().toString();
}
}
m_editTextLangs.setText(str);
}
});
builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
Bir layout xml dosyası da AlertDialog sınıfına iliştirilebilmektedir.Bunun için layoutInflater
nesnesi gerekmektedir. layoutInflater
nesnesi Context sınıfının getView
metodu ve getInflater
metodu ile elde edilebilmektedir.
Android Studio içerisinde bir xml dosyası kolaylıkla eklenmeketedir.
NOTLARIM [DROPOX]057-LoginAlertDialog ne yapar?7
Verilen xml dosyasindaki layout tasarımını AlertDialog'a uygular.
AlertDialog sınıfı için pozitif ve negatif butonlar dismiss
işlemi yaparlar.Yani programcı tekrar aynı builderi kullanarak alert dialog nesnesi elde edemez.Tekrar gerekli elemanları oluşturup AlertDialog nesnesini create diyerek tekrar yaratmalıdır. Ya da türetme yaparak tüm bunları sarmalayabilir.
Ancak programcı istersen Builderi saklamak yerine AlertDialog türünden nesneyi saklayabilir.AlertDialog saklanırsa sürekli aynı nesne kullanılabilir.
AlertDialog üzerindeki kontrollere ilişkin bilgiler almak için en iyi yerler ya create edildikten sonra ya da ilgili butonların onClick metodlarında ele almaktır.Burada AlertDialog sınıfın findViewbyId
metodu kullanılır.
AlertDialog bağlandığı activity nesnesinin mesaj kuyruğunu kullanmaktadır.Dolayısıyla bağlı olduğu activitye ait her türlü işlem yapılabilir. Yani AlertDialog ve bağlı olduğu activity aynı Thread içerisinde çalışabilmektedir.
setView
metodu ile daha önce dinamik olarak oluşturulmuş olan ve ya View referansı elde olan başka bir view nesnesi de iliştirilebilir.