Cómo establecer la validación nulo en el cuadro de diálogo edittextpreference

Cómo establecer la validación nulo en el cuadro de diálogo de edittextpreference de modo que si es nulo, el usuario no debe poder hacer clic en ok y algún mensaje debe mostrarse en el propio diálogo. He estado tratando de encontrarlo durante mucho tiempo, pero sin éxito ….

    3 Solutions collect form web for “Cómo establecer la validación nulo en el cuadro de diálogo edittextpreference”

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

    De esta manera se realiza la validación y si queremos mostrar el mensaje en el cuadro de diálogo, entonces un diálogo personalizado tiene que ser creado como ya contó Phil.

    Creo que lo que buscas es esto. Está utilizando el PreferenceDialog predefinido (con EditText) y desea comprobar si el texto es nulo. Según mi conocimiento, el "texto" en este caso es el changedPreference, por lo tanto puede ir con esto:

    Simplemente use un onPreferenceChangedListener para eso.

     yourPreference.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference preference, Object changedValue) { if(changedValue == null) { // handle it being null return false; } else { return true; } } }); 

    Para requisitos más avanzados, recomendaría que usted implemente su propio diálogo y dentro de él, haga lo que usted desea. Puede hacer que suceda mediante la definición de una entrada de lista de preferencias en .xml y luego generar el cuadro de diálogo al hacer clic en él.

     Preference yourCustomPref = (Preference) findPreference("yourPref"); yourCustomPref.setOnPreferenceClickListener(new OnPreferenceClickListener() { public boolean onPreferenceClick(Preference preference) { // spawn your dialog here return true; } }); 

    Así es como puede implementar su cuadro de diálogo EditarTexto personalizado:

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

    Y luego lo llaman así:

     buildDialog(yourcontext).show(); 

    Cuando edittext es nulo, entonces el botón ok se desactivará y tan pronto como se ingrese el texto, se habilitará:

     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(); } } 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.