范围EditText验证

时间:2018-09-29 07:47:25

标签: android android-layout

我要验证我的Edittext是否为100到200之间的数字。因此,根据this我创建了InputFilterMinMax类。当我运行我的应用程序时,无法向其中写入任何内容我的edittext,因为当我在InputFilterMinMaxreturn ""中插入1时。我想在编辑文本中插入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用户界面上进行申请。然后我有oncreate方法:

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 :(得分:0)

在您的代码段中

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"))))});
}
相关问题