2014-02-18 3 views
2

Я прочитал много ответов на этот вопрос, но мой вопрос спрашивает, где я размещаю код. Я хочу проверить, что число больше 100 в edittextPreference. Это код, который я использую для заполнения preferecnes:Validating editTextPreference Android

public class SettingsFrag extends PreferenceFragment{ 

    //Override onCreate so that the code will run when the activity is started. 
    @Override 
    public void onCreate(Bundle savedInstanceState){   
      //Call to the super class. 
      super.onCreate(savedInstanceState); 

      //add the preferences from the XML file. 
      addPreferencesFromResource(R.xml.preferences); 
    } 

}

ли здесь добавить проверку или я должен создать другой класс?

preferences.xml:

<EditTextPreference    
     android:key="geofence_range"    
     android:title="Geofence Size"    
     android:defaultValue="500"  
     android:inputType="number" 
     android:summary="Geofence Size Around User Location"    
     android:dialogTitle="Enter Size (meters):" /> 

ответ

8

Добавить setOnPreferenceChangeListener для EditTextPreference после addPreferencesFromResource для проверки вводимых данных для пользователя:

EditTextPreference edit_Pref = (EditTextPreference) 
        getPreferenceScreen().findPreference("geofence_range"); 
    edit_Pref.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { 

    @Override 
     public boolean onPreferenceChange(Preference preference, Object newValue) { 
      // put validation here.. 
      if(<validation pass>){ 
       return true; 
      }else{ 
       return false; 
      } 
     } 
    }); 
4

Ха. Еще одна из тех вещей, которые должны быть настолько прокляты в Android, но это не так. Другие ответы просто молча препятствуют написанию результата в предпочтениях, которые кажутся немного дрянными. (Показывая тост менее дрянной, но все еще дрянной).

Для этого вам потребуется индивидуальное предпочтение. Настройте onValidate в соответствии с вашими потребностями.

package com.two_play.extensions; 

import android.app.AlertDialog; 
import android.content.Context; 
import android.content.DialogInterface; 
import android.os.Bundle; 
import android.preference.EditTextPreference; 
import android.util.AttributeSet; 
import android.view.View; 
import android.widget.EditText; 

public class ValidatingEditTextPreference extends EditTextPreference { 
    public ValidatingEditTextPreference(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { 
     super(context, attrs, defStyleAttr, defStyleRes); 
    } 

    public ValidatingEditTextPreference(Context context, AttributeSet attrs, int defStyleAttr) { 
     super(context, attrs, defStyleAttr); 
    } 

    public ValidatingEditTextPreference(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    public ValidatingEditTextPreference(Context context) { 
     super(context); 
    } 

    @Override 
    protected void showDialog(Bundle state) { 
     super.showDialog(state); 
     AlertDialog dlg = (AlertDialog)getDialog(); 
     View positiveButton = dlg.getButton(DialogInterface.BUTTON_POSITIVE); 
     getEditText().setError(null); 
     positiveButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       onPositiveButtonClicked(v); 
      } 
     }); 
    } 

    private void onPositiveButtonClicked(View v) { 
     String errorMessage = onValidate(getEditText().getText().toString()); 
     if (errorMessage == null) 
     { 
      getEditText().setError(null); 
      onClick(getDialog(),DialogInterface.BUTTON_POSITIVE); 
      getDialog().dismiss(); 
     } else { 
      getEditText().setError(errorMessage); 
      return; // return WITHOUT dismissing the dialog. 
     } 
    } 

    /*** 
    * Called to validate contents of the edit text. 
    * 
    * Return null to indicate success, or return a validation error message to display on the edit text. 
    * 
    * @param text The text to validate. 
    * @return An error message, or null if the value passes validation. 
    */ 
    public String onValidate(String text) 
    { 
     try { 
      Double.parseDouble(text); 
      return null; 
     } catch (Exception e) 
     { 
      return getContext().getString(R.string.error_invalid_number); 
     } 
    } 
} 
Смежные вопросы