Как проверить значение EditTextPreference для определенного диапазона int - PullRequest
2 голосов
/ 20 февраля 2012

Я хочу проверить, что значение EditTextPreference находится в пределах определенного диапазона int (скажем, от 1 до 22).Единственная часть, которую я мог проверить, была inputType (только число) со следующим объявлением xml в файле prefs.xml.

android: inputType = "number"

Второе, что я сделал, - это напишите следующий код в действии ListSettings.

public class ListSettings extends PreferenceActivity implements OnSharedPreferenceChangeListener{

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    addPreferencesFromResource(R.xml.prefs);
    SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
    sp.registerOnSharedPreferenceChangeListener(this);
}
 public void onSharedPreferenceChanged(SharedPreferences sp, String key) {
        String value = sp.getString(key, null);
        int intZoomValue = Integer.parseInt(value);
        if (intZoomValue < 1 || intZoomValue > 22) {
            Intent intent = new Intent().setClass(this, dialog.class);
            // I want to call the dialog activity here...
        }

  }

и dialog.class выглядит следующим образом:

public class dialog extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);

  AlertDialog.Builder builder = new AlertDialog.Builder(this);
  builder.setMessage("Please enter a value between 1-22!");
  builder.setCancelable(true);

  AlertDialog alert = builder.create();
  alert.show();
  }
}

ЧтоЯ хочу добиться - вызывать dialog.class (диалоговое окно с предупреждением) всякий раз, когда пользователь вводит значение, не находящееся в диапазоне 1-22.

Я не могу понять, как правильно проверить правильность пути.

Ответы [ 4 ]

2 голосов
/ 07 августа 2013

Это то, что я сделал:

    EditTextPreference pref = (EditTextPreference) findPreference(this.getString(R.string.my_setting_key));
    pref.getEditText().setFilters(new InputFilter[]{
            new InputFilter (){

                @Override
                public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {   
                    try {
                        int input = Integer.parseInt(dest.toString() + source.toString());
                        if (input<MAX_VALUE && input >0)
                            return null;
                    } catch (NumberFormatException nfe) { }     
                    return "";
                }
            }
    });

Итак, хитрость в том, что вы можете получить и EditText из вашей EditTextPreference, используя:

    pref.getEditText()

, затем вы можете установить фильтр.Фильтр должен возвращать ноль, когда все в порядке, и пустую строку, когда введенный пользователем символ сделает текст недействительным.

См. Также здесь

0 голосов
/ 17 декабря 2014

Решение InputFilter не работает, особенно с selectAllOnFocus.Если вы не можете использовать предложенную альтернативу выбора / прядильщика, например, когда хотите применить минимум, но не максимум, вы можете отключить кнопку OK, если значение недопустимо, например:позволяет указать минимальные и / или максимальные значения как Integer, Float или Double (передать NULL для неограниченного).При желании вы можете разрешить / запретить пустые значения.(Первоначально допустимые значения принимаются.)

0 голосов
/ 20 февраля 2012

Вы можете использовать setPositivteButton и проверить ввод после того, как пользователь нажмет Okay, если не в порядке, снова откройте диалоговое окно.

0 голосов
/ 20 февраля 2012

Может быть удобнее просто зафиксировать значение в допустимом диапазоне, если введено недопустимое значение, и уведомить пользователя с помощью тоста, что вы это сделали.Например, 1-22, вы можете даже рассмотреть возможность использования Spinner вместо EditText, чтобы пользователь не мог ввести недопустимое значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...