2011-06-28 11 views
16

मैं सकारात्मक और रद्द बटन के साथ एक साधारण टेक्स्ट फ़ील्ड अलर्ट संवाद का उपयोग कर रहा हूं। मैं अपने अलर्ट संवाद को सत्यापित करना चाहता हूं और इनपुट को अमान्य होने पर किए गए बटन को AlertDialog को बंद करने से रोकना चाहता हूं।क्या AlertDialog को अमान्य इनपुट के साथ बंद करने से रोकने का कोई तरीका है?

क्या वैधता विफल होने पर पॉजिटिवबटन ऑनक्लिक() हैंडलर को संवाद बंद करने से रोकने के लिए कोई कस्टम संवाद बनाने का कोई तरीका नहीं है?

class CreateNewCategoryAlertDialog { 
    final EditText editText; 
    final AlertDialog alertDialog; 

    class PositiveButtonClickListener implements OnClickListener { 
     @Override 
     public void onClick(DialogInterface dialog, int which) { 
      String name = editText.getText().toString(); 
      if(name.equals("")) { 
       editText.requestFocus(); 
       editText.setError("Please enter a name"); 
       // Some code to stop AlertDialog from closing goes here... 
      } else { 
       doSomethingUsefulWithName(); 
      } 
     } 
    } 

    AlertDialog buildAlertDialog(Context context) { 
     return new AlertDialog.Builder(context) 
     .setTitle(context.getString(R.string.enter_name)) 
     .setMessage(context.getString(R.string.enter_name_msg)) 
     .setView(editText) 
     .setPositiveButton(context.getString(R.string.done), new PositiveButtonClickListener()) 
     .setNegativeButton(context.getString(R.string.cancel), null).create(); 
    } 
} 
+0

क्षमा करें, मैं सिर्फ देखा यह [इस (अस्वीकृत) प्रश्न] का डुप्लिकेट है (http://stackoverflow.com/q/4785571/403455)। मैं इसे डुप्लिकेट के रूप में बंद कर दूंगा, लेकिन मैं एक बेहतर उत्तर की तलाश में हूं। अगर जवाब "नहीं" है, तो हो। –

+1

अपना खुद का कस्टम संवाद बनाना [पिछले प्रश्नों] के आधार पर जाने का तरीका प्रतीत होता है (http://stackoverflow.com/questions/4016313/how-to-keep-an-alertdialog-open-after-button-onclick- है आधारित)। ऐसा लगता है कि यह सबसे आसान समाधान होगा, और यही वह है जो मुझे अतीत में करना पड़ा था। – theisenp

+0

मैं आपका प्रश्न लिख रहा हूं। चलो देखते हैं कि डिस्प्लेलाइन बैज प्रश्नों पर लागू होता है :) – EboMike

उत्तर

9

यहां मैंने यह कैसे किया। तकनीकी रूप से, यह तकनीकी रूप से संवाद को खुला नहीं रखता है, यह इसे क्षणिक रूप से बंद कर देता है और इसे फिर से खोलता है, लेकिन शुद्ध परिणाम समान होता है।

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; 
    } 
} 
संबंधित मुद्दे

 संबंधित मुद्दे