[英]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.