Проверка диапазона EditText - PullRequest
0 голосов
/ 29 сентября 2018

Я хочу проверить свой текст редактирования для моего номера, который находится в диапазоне от 100 до 200. Таким образом, в соответствии с этим я создал InputFilterMinMax класс. Когда я запускаю свое приложение, я не могу ничего записать вмой edittext, потому что, когда я вставляю 1 в InputFilterMinMax class return "".Я хочу вставить 100 в мой текст редактирования.

Это edittext xml:

<EditText
    android:id="@+id/txtTajavozArea"
    android:layout_weight="0.5"
    android:gravity="center_horizontal"
    android:inputType="numberDecimal"
    android:selectAllOnFocus="true"
    android:singleLine="true"/>

После инициализации моего пользовательского интерфейса я создал метод для проверки пользовательского интерфейса, потому что некоторая проверка происходит с моего сервера, и я должен подать заявку на мой пользовательский интерфейс Android.Тогда я создаю метод, у меня есть:

LoadUi();
validateForm();
LoadObj();

В validateForm метод у меня есть эта часть кода:

String viewIdName = cursor.getString(cursor.getColumnIndex("ControlName"));
int id = getResources().getIdentifier(viewIdName, "id", this.getPackageName());
View view = findViewById(id);
if (view instanceof EditText) {

if (!cursor.getString(cursor.getColumnIndex("MaxValue")).equals("null") &&
        !cursor.getString(cursor.getColumnIndex("MinValue")).equals("null")) {
    editText.setFilters(new InputFilter[]{new InputFilterMinMax(
            Integer.parseInt(cursor.getString(cursor.getColumnIndex("MaxValue"))),
            Integer.parseInt(cursor.getString(cursor.getColumnIndex("MinValue"))))});
}

Как вы можете видеть, я получаю свое мнение таким образом, потому что мойпросмотр после загрузки в метод LoadUi().

Но, как я уже упоминал выше, я ничего не могу написать !!

Это класс InputFilterMinMax:

public class InputFilterMinMax implements InputFilter {

    private int min, max;

    public InputFilterMinMax(int min, int max) {
        this.min = min;
        this.max = max;
    }

    public InputFilterMinMax(String min, String max) {
        this.min = Integer.parseInt(min);
        this.max = Integer.parseInt(max);
    }

    @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 (isInRange(min, max, input))
                return null;
        } catch (NumberFormatException nfe) { }
        return "";
    }

    private boolean isInRange(int a, int b, int c) {
        return b > a ? c >= a && c <= b : c >= b && c <= a;
    }
}

1 Ответ

0 голосов
/ 29 сентября 2018

В вашем фрагменте кода

if (!cursor.getString(cursor.getColumnIndex("MaxValue")).equals("null") &&
        !cursor.getString(cursor.getColumnIndex("MinValue")).equals("null")) {
    editText.setFilters(new InputFilter[]{new InputFilterMinMax(
            Integer.parseInt(cursor.getString(cursor.getColumnIndex("MaxValue"))),
            Integer.parseInt(cursor.getString(cursor.getColumnIndex("MinValue"))))});
}

Вы переходите от MaxValue к MinValue, поэтому MinValue и MaxValue просто нужно поменять местами.Это должно быть

if (!cursor.getString(cursor.getColumnIndex("MaxValue")).equals("null") &&
        !cursor.getString(cursor.getColumnIndex("MinValue")).equals("null")) {
    editText.setFilters(new InputFilter[]{new InputFilterMinMax(
            Integer.parseInt(cursor.getString(cursor.getColumnIndex("MinValue"))),
            Integer.parseInt(cursor.getString(cursor.getColumnIndex("MaxValue"))))});
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...