簡體   English   中英

范圍EditText驗證

[英]Range EditText validation

我想驗證我的edittext是否為100到200之間的數字,因此根據我創建了InputFilterMinMax類。當我運行我的應用程序時,我無法在edittext中寫入任何內容,因為當我在InputFilterMinMax類中插入1時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"/>

初始化我的用戶界面后,我創建了一種用於ui驗證的方法,因為一些驗證來自我的服務器,因此我必須在我的android ui上應用。 然后我的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;
    }
}

在您的代碼段中

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"))))});
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM