2011-06-28 9 views
16

Pozitif ve iptal butonlu basit bir metin alan uyarı iletişim kutusu kullanıyorum. Uyarı iletişimimi doğrulamak ve giriş geçersizse, yapılan düğmenin AlertDialog uygulamasını kapatmasını engellemek istiyorum.AlertDialog'un geçersiz girişleri kapatmasını engellemenin bir yolu var mı?

Onaylama başarısız olursa, PositiveButton onClick() işleyicisinin iletişim kutusunu kapatmasını engellemek için özel bir iletişim kutusu oluşturmanın herhangi bir yolu var mı?

+0

Üzgünüm, sadece bu [bu (kabul edilmeyen) Söz] kopyasıdır fark (http://stackoverflow.com/q/4785571/403455). Bir kopya olarak kapatırdım, ama daha iyi bir cevap arıyorum. Cevap "hayır" ise, öyle olsun. –

+1

Kendi özel diyaloğunuzu oluşturmak, [önceki sorulara] dayanarak gitmek için bir yol gibi görünüyor (http://stackoverflow.com/questions/4016313/how-to-keep-an-alertdialog-open-after-button-onclick- olan ateş). En basit çözüm olacak gibi görünüyor ve geçmişte yapmak zorunda olduğum şey bu. – theisenp

+0

Sorunuzu oylarım. Anlaşılan rozetin sorular için geçerli olup olmadığını görelim :) – EboMike

cevap

9

İşte nasıl yaptım. Teknik olarak, diyaloğu teknik olarak açık tutmaz, anlık olarak kapatır ve tekrar açar, ancak net sonuç aynıdır.

class MyAlertDialog implements OnDismissListener, OnCancelListener { 
    final private EditText editText; 
    final private AlertDialog alertDialog; 
    final private EventManager eventManager; 
    final private CategorySelector categorySelector; 

    private Boolean canceled; 

    MyAlertDialog(Context context) { 
     editText = new EditText(context); 
     alertDialog = buildAlertDialog(context); 
     alertDialog.setOnDismissListener(this); 
     alertDialog.setOnCancelListener(this); 
     show(); 
    } 

    private AlertDialog buildAlertDialog(Context context) { 
     return new AlertDialog.Builder(context) 
     .setTitle(context.getString(R.string.enter_name)) 
     .setMessage(context.getString(R.string.enter_name)) 
     .setView(editText) 
     .setNeutralButton(context.getString(R.string.save_text), null) 
     .setNegativeButton(context.getString(R.string.cancel_text), null) 
      .create(); 
    } 

    public void show() { 
     canceled = false; 
     alertDialog.show(); 
    } 

    @Override public void onDismiss(DialogInterface dialog) { 
     if(!canceled) { 
      final String name = editText.getText().toString(); 
      if(name.equals("")) { 
       editText.setError("Please enter a non-empty name"); 
       show(); 
      } else { 
       doWhateverYouWantHere(name); 
      } 
     } 
    } 

    @Override public void onCancel(DialogInterface dialog) { 
     canceled = true; 
    } 
}