2010-05-09 25 views
5

मैं एक अलर्टडिअलॉग का उपयोग कर रहा हूं जो कि बहुत आसान है, बस एक टेक्स्ट बॉक्स के साथ एक कस्टम व्यू, और अलर्टडिअलॉग सकारात्मक सबमिट बटन। मैं यह सत्यापित करना चाहता हूं कि उपयोगकर्ता ने संवाद को खारिज करने से पहले टेक्स्ट बॉक्स में टेक्स्ट दर्ज किया था। मैं दो संभावनाएं देखते हैं, प्रत्येक के बारे में सवालों के साथ:संवाद इनपुट मान्य करना

  • (() कुछ onChange में पाठ बॉक्स के लिए हैंडलर टाइप) सबमिट बटन अक्षम जब तक पाठ बॉक्स खाली नहीं है
    • कैसे कर आप जानते हैं कि टेक्स्ट बॉक्स की सामग्री कब बदलती है?
    • आप AlertDialog के बटन ऑब्जेक्ट का संदर्भ कैसे प्राप्त करते हैं? सबमिट बटन के onClick में
  • चेक() और संवाद के नकारने रद्द यदि वह रिक्त हो।
    • क्या यह अलर्टडिअलॉग के बटन के साथ ऐसा करना संभव है? संवाद मैन्युअल बुला खारिज() या रद्द() के बिना खारिज, तो मैं यकीन नहीं है ...

एक AlertDialog (बनाम एक कस्टम संवाद) के साथ संभव इन विकल्पों में से किसी है?

मुझे लगता है कि दूसरा विकल्प सबसे आसान होगा, लेकिन यदि यह संभव हो तो मैं इसके लिए तैयार हूं।

उत्तर

3

मुझे लगता है कि सबसे आसान तरीका एक एक्सएमएल फ़ाइल में अपना खुद का संवाद परिभाषित करना है। तो फिर तुम यह बहुत ही सरल (इस उदाहरण गतिविधि वर्ग में कहीं पर) प्रदर्शित कर सकते हैं:

Dialog dialog = new Dialog(this); 
dialog.setContentView(R.layout.your_dialog_file); 

Button yourButton = dialog.findViewById(R.id.yourButton); 
final EditText text = dialog.findViewById(R.id.yourTextEdit); 
yourButton.setOnClickListener({ 

public void onClick(View view) { 
    if (! (text.getText().toString.equals(""))) { 
     //go on here and dismiss dialog 
    } 

}); 
1

यहाँ इनपुट को मान्य है और स्क्रीन पर एक सूचना संवाद रखना यदि इनपुट मान्य नहीं है के लिए एक रास्ता है। दरअसल यह संवाद को हटा देता है और इसकी एक नई प्रतिलिपि रखता है।

अपने सेटपोस्टिवबटन के ऑनक्लिक फ़ंक्शन में, अपना सत्यापन करें। यदि चीजें नहीं हैं तो वे उपयोगकर्ता को टोस्ट दिखाएं। फिर अपने संवाद पर हटाएंडियलॉग को कॉल करें। फिर - और यह मुश्किल हिस्सा है, असीमित रूप से अपने संवाद पर showDialog को कॉल करें (लागू होने पर तर्क के साथ)। इसके अलावा: उपयोगकर्ता के इनपुट को खोने के क्रम में, आपको उन मानों को रखना चाहिए जिन्हें उन्होंने उस बंडल में दर्ज किया था जिसके साथ आप संवाद का आह्वान करते हैं। और निश्चित रूप से संवाद के लिए आपके सेटअप कोड को बंडल में उन मानों की तलाश करने और संवाद फ़ील्ड को उचित रूप से पूर्ववत करने की आवश्यकता है।

तो अपने कोड कुछ इस तरह दिखेगा:

alert.setPositiveButton(id, 
new DialogInterface.OnClickListener() { 
    public void onClick(DialogInterface dialog, int whichButton) 
    { 
    if ((your validation conditions)) { 
     // validation conditions not satisfied 
     removeDialog(myDialogId); 
     Toast.makeText(blah blah).show(); 
     // now create a new args bundle for the dialog 
     Bundle newArgs = new Bundle(); 
     // now copy whatever you need from the args used to invoke to dialog 
     newArgs.putIntegerArrayList("items", myList); 
     // now save the user's input in a bundle 
     newArgs.putString("dialogToFieldContent", toString); 
     final Bundle finalArgs = newArgs; 
     Handler handler = new Handler(); 
     handler.post(new Runnable() { 
      @Override 
      public void run() { 
      showDialog(myDialogId, finalArgs); 
      } 
     }); 
    } 
    else { 
     // if everything is ok 
    } 
    } 
}); 
+0

मुझे संवाद आईडी कहां से मिलती है? क्या आप कृपया एक न्यूनतम, कार्यात्मक उदाहरण प्रदान कर सकते हैं !? –

4

मैं एक इनपुट फ़ील्ड के लिए एक TextWatcher निर्धारित करते हैं, और फिर जब सत्यापन शर्तें पूरी होने पर सकारात्मक बटन को सक्षम। मैं डिफ़ॉल्ट रूप से सकारात्मक बटन अक्षम करता हूं।

AlertDialog.Builder builder = new AlertDialog.Builder(getSherlockActivity()); 
final View dialogView = LayoutInflater.from(getSherlockActivity()).inflate(R.layout.create_playlist, null); 
final EditText inputField = (EditText) dialogView.findViewById(R.id.edit_newPlaylistName); 
... //proceed to setup dialog using builder 
final AlertDialog alertDialog = builder.show(); 
alertDialog.setCanceledOnTouchOutside(true); 
final Button button = alertDialog.getButton(AlertDialog.BUTTON_POSITIVE); 
button.setEnabled(false); 
inputField.addTextChangedListener(new TextWatcher() { 
    @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, int after) { 
    } 

    @Override 
    public void onTextChanged(CharSequence s, int start, int before, int count) { 
     // my validation condition 
     if (inputField.getText().length() > 0) { 
      button.setEnabled(true); 
     } else { 
      button.setEnabled(false); 
     } 
    } 

    @Override 
    public void afterTextChanged(Editable s) { 

    } 
}); 
संबंधित मुद्दे