我要验证我的Edittext是否为100到200之间的数字。因此,根据this我创建了InputFilterMinMax
类。当我运行我的应用程序时,无法向其中写入任何内容我的edittext,因为当我在InputFilterMinMax
类return ""
中插入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;
}
}
答案 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"))))});
}