5

edittextpreference संवाद में शून्य सत्यापन कैसे सेट करें ताकि यदि यह शून्य हो, तो उपयोगकर्ता ठीक क्लिक करने में सक्षम नहीं होना चाहिए और संवाद में कुछ संदेश प्रदर्शित होना चाहिए। मैं इसे लंबे समय तक ढूंढने की कोशिश कर रहा हूं लेकिन कोई सफलता नहीं ....edittextpreference संवाद में शून्य सत्यापन कैसे सेट करें

+0

thats क्या पूछ रहा हूँ ... यह कैसे करना है के रूप में मैं नहीं मिल रहा है है इस पर कुछ भी। आप मुझसे मेरे लिए एक कोड लिखने के लिए नहीं कह रहे हैं लेकिन यह बताने के लिए कि क्या करना है। –

+0

@ weblado.at :: edittext और edittextpreference दो अलग-अलग चीजें हैं यदि आप जानते हैं। मुझे पता है कि संपादन पर सत्यापन कैसे सेट करें ..... और आपने मुझे सही ढंग से खोज को पढ़ने के बिना भी नीचे मतदान किया। –

+0

मुझे लगता है कि आपने आखिरी पंक्ति नहीं पढ़ी है .... मैं इसे लंबे समय से ढूंढने की कोशिश कर रहा हूं लेकिन कोई सफलता नहीं .... मैंने आपके द्वारा दिए गए लिंक की कोशिश की है। समस्या यह है कि यह setonpreferencechangelistener नहीं कहा जाता है । –

उत्तर

2

जब edittext अशक्त तो ठीक बटन अक्षम कर दिया जाएगा और जैसे ही पाठ दर्ज किया गया है यह सक्षम हो जाएगा ::

public class CustomEditTextPreference extends EditTextPreference implements 
     OnClickListener { 


     public CustomEditTextPreference(Context ctx, AttributeSet attrs, int defStyle) 
     { 
      super(ctx, attrs, defStyle);   
     } 

     public CustomEditTextPreference(Context ctx, AttributeSet attrs) 
     { 
      super(ctx, attrs);     
     } 

     private class EditTextWatcher implements TextWatcher 
     {  
      @Override 
      public void onTextChanged(CharSequence s, int start, int before, int count){} 

      @Override 
      public void beforeTextChanged(CharSequence s, int start, int before, int count){} 

      @Override 
      public void afterTextChanged(Editable s) 
      {   
       onEditTextChanged(); 
      } 
     } 
     EditTextWatcher m_watcher = new EditTextWatcher(); 

     /** 
     * Return true in order to enable positive button or false to disable it. 
     */ 
     protected boolean onCheckValue(String value) 
     {   
      if (value.trim().equals("")) 
      { 
       return false; 
      } 
      return true; 
     } 

     protected void onEditTextChanged() 
     { 
      boolean enable = onCheckValue(getEditText().getText().toString()); 
      Dialog dlg = getDialog(); 
      if(dlg instanceof AlertDialog) 
      { 
       AlertDialog alertDlg = (AlertDialog)dlg; 
       Button btn = alertDlg.getButton(AlertDialog.BUTTON_POSITIVE); 
       btn.setEnabled(enable);     
      } 
     } 

     @Override 
     protected void showDialog(Bundle state) 
     { 
      super.showDialog(state); 

      getEditText().removeTextChangedListener(m_watcher); 
      getEditText().addTextChangedListener(m_watcher); 
      onEditTextChanged(); 
     }  
    } 
2

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

बस इसके लिए पर प्रीपेरेंस चेंज लिस्टर का उपयोग करें।

yourPreference.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { 
     @Override 
     public boolean onPreferenceChange(Preference preference, Object changedValue) { 

       if(changedValue == null) { 
        // handle it being null 

        return false; 
       } else { 

        return true; 
       } 
     } 
    }); 

अधिक उन्नत आवश्यकताओं के लिए, मैं सुझाव है कि आप अपने खुद के संवाद लागू और इसके अंदर, आप जो भी इच्छा है। आप .xml में वरीयता सूची प्रविष्टि को परिभाषित करके ऐसा कर सकते हैं और उसके बाद डायलॉग को उस पर क्लिक करके उत्पन्न कर सकते हैं।

Preference yourCustomPref = (Preference) findPreference("yourPref"); 
yourCustomPref.setOnPreferenceClickListener(new OnPreferenceClickListener() { 

     public boolean onPreferenceClick(Preference preference) { 

      // spawn your dialog here 
      return true; 
     } 
    }); 

यह अपने कस्टम EditText संवाद आप कैसे लागू कर सकता है:

public Builder buildDialog(final Context c) { 

     AlertDialog.Builder builder = new AlertDialog.Builder(c); 
     builder.setTitle("EditText Dialog"); 
     builder.setMessage("Enter text:"); 

     LinearLayout llV = new LinearLayout(c); 
     llV.setOrientation(1); // 1 = vertical 

     final EditText patName = new EditText(c); 
     patName.setHint("Enter text..."); 

     LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT, 1f); 
     lp.bottomMargin = 20; 
     lp.rightMargin = 30; 
     lp.leftMargin = 15; 

     patName.setLayoutParams(lp); 

     llV.addView(patName); 

     builder.setView(llV); 

     builder.setPositiveButton("Save", new DialogInterface.OnClickListener() { 

      @Override 
      public void onClick(DialogInterface dialog, int which) { 

       if(patName.getText().toString().length() > 0) { 

       } else { 

       }  
      } 
     }); 

     builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 

      @Override 
      public void onClick(DialogInterface dialog, int which) { 

       dialog.dismiss(); 
      } 
     }); 

     return builder; 
    } 

और फिर इस तरह इसे कहते:

buildDialog(yourcontext).show(); 
+1

ठीक है तो मैं आपको सलाह दूंगा कि आप संवाद को लागू करें स्वयं। मुझे जो कुछ भी आप चाहते हैं उसे प्राप्त करने में केवल कुछ मिनट लग सकते हैं। –

+1

या मैं कर सकता हूं लेकिन सेटिंग्स के लिए (http://developer.android.com/guide/topics/ui/settings.html) संवाद अंतर्निहित हैं। –

+0

बेशक। लेकिन जब वरीयता एक्टिविटी के अंदर सूची तत्व पर क्लिक करते हैं तो आप जो भी चाहें कर सकते हैं। उदाहरण के लिए अपना कस्टम संवाद दिखाएं और उन सभी चीजों को करें जो आप चाहते हैं। –

5
edttxtpref = (EditTextPreference) getPreferenceScreen().findPreference(
      "edttxtkey"); 
    edttxtpref.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { 
     @Override 
     public boolean onPreferenceChange(
       android.preference.Preference preference, Object newValue) { 
      if (newValue.toString().trim().equals("")) { 

       Toast.makeText(getActivity(), "Username can not be empty", 
         Toast.LENGTH_LONG).show(); 

       return false; 
      } 
      return true; 
     } 
    }); 

इस तरह सत्यापन किया जाता है और अगर हम संदेश को स्वयं संवाद में प्रदर्शित करना चाहते हैं, फिर फिल द्वारा पहले से बताए गए अनुसार एक कस्टम संवाद बनाया जाना चाहिए।

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