5

Düzenleme iletişim kutusunda null doğrulaması nasıl ayarlanır, böylece null olursa, kullanıcı tamam tıklayamaz ve iletişim kutusunun içinde bir ileti görüntülenmelidir. Uzun zamandır bulmaya çalışıyorum ama başarı yok ....Düzenleme iletişim kutusunda null doğrulaması nasıl ayarlanır

+0

i almıyorum olarak bunu nasıl ... soruyorum thats ne olduğunda Bu konuda bir şey.Ama benim için bir kod yazmanızı istemiyorum ama ne yapacağımı söylemek. –

+0

@ weblado.at :: edittext ve edittextpreference, eğer bildiğiniz iki farklı şeydir. Edittext üzerinde bir doğrulamayı nasıl ayarlayacağımı biliyorum ..... ve sadece doğru bir şekilde okumu okumadan bana oy verdiniz. –

+0

Sanırım son satırı okumadım .... uzun bir zamandan beri bulmaya çalışıyorum ama başarı yok .... verdiğim bağlantıyı zaten denedim. Problem bu setonpreferencechangelistener denilmiyor . –

cevap

2

EditText boş ardından Tamam düğmesine devre dışı bırakılır ve metin girilir en kısa sürede etkin olacak ::

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

Bence aradığın şey bu. Önceden tanımlanmış PreferenceDialog'u (EditText ile) kullanıyor ve Text'in boş olup olmadığını kontrol etmek istiyorsunuz. Bilgim, bu durumda "metin", değiştirilenPreferans olduğunu, bu nedenle:

Bunun için bir onPreferenceChangedListener kullanın.

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

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

        return false; 
       } else { 

        return true; 
       } 
     } 
    }); 

daha gelişmiş gereksinimleri için ben kendi Dialog uygulamak ve onun içinde, arzu ne gerekiyorsa öneriyoruz. Bunu, .xml'de bir Tercihler listesi girdisi tanımlayarak gerçekleştirebilirsiniz ve ardından üzerine tıklayarak Diyaloğu geliştirebilirsiniz. Sonra

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; } 

Ve

böyle diyoruz:

buildDialog(yourcontext).show(); 
+1

Peki o zaman diyaloğu uygulamanızı tavsiye ederim kendin. İstediğin herşeyi elde etmek için sadece birkaç dakikanızı ayırmalıyım. –

+1

ya yapabilirim ama ayarları için (http://developer.android.com/guide/topics/ui/settings.html) diyaloglar dahili. –

+0

Elbette. Ancak bir PreferenceActivity içindeki bir List öğesine tıkladığınızda ne istersen yapabilirsin. Örneğin, özel iletişim pencerenizi gösterin ve orada istediğiniz her şeyi yapın. –

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; 
     } 
    }); 

Bu doğrulama yapılır yolu ve eğer

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

     public boolean onPreferenceClick(Preference preference) { 

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

Bu

uygulamak nasıl özel EditText Diyalog olduğunu mesajı diyalogun içinde görüntülemek istiyoruz, daha sonra Phil'in daha önce söylediği gibi bir özel diyaloğun oluşturulması gerekiyor.

İlgili konular