验证editTextPreference Android

Nat*_*arr 7 android edittextpreference

我已经阅读了关于这个问题的许多答案,但我的问题是询问我放置代码的位置.我希望验证一个数字大于100 edittextPreference.这是我用来填充优先顺序的代码:

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);
  }
Run Code Online (Sandbox Code Playgroud)

}

它在这里我添加验证还是我必须创建另一个类?

的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):" /> 
Run Code Online (Sandbox Code Playgroud)

ρяσ*_*я K 11

添加setOnPreferenceChangeListenerfor EditTextPreferenceafter 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;
             }
       }
    });
Run Code Online (Sandbox Code Playgroud)


Rob*_*ies 7

呵呵.另外一个应该在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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)