我正在尝试设置一个系统来验证用户输入,在这种情况下,只是检查用户输入的内容。
我有RegExp("^(921|931)$\\d{5,5}$").test("93111111");
检查Utility class
是否有数据。
我正在使用EditText
,然后从OnFocusChangeListener
调用该方法。
这是Utility class
:
activity
这是editText = (EditText) view.findViewById(R.id.editText);
editText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override public void onFocusChange(View v, boolean hasFocus) {
if (!hasFocus) {
if (Utility.checkInput(editText) == false) {
Toast.makeText(getActivity(), "Enter value!",
Toast.LENGTH_SHORT).show();
// TODO....
// Retain focus - do not allow user to move on.
// This is where I am lost...
}
}
}
});
:
Utility class
我难倒的地方是如果检查输入返回false,如何保持焦点。我想阻止用户前进。我确信有一个简单的解决方案,但我还没有找到它。
我也想知道public class Utility {
public static boolean checkInput(EditText editText) {
if (editText.getText().length() != 0) {
return true;
}
return false;
}
//.../
xml
是否会影响这一点
感谢。
修改
这是我的xml:
ime.Options
当我使用时:
<EditText
android:imeOptions="actionDone"
android:inputType="textPersonName"
android:maxLength="24"/>
<spinner ../
<EditText
android:imeOptions="actionDone"
android:inputType="phone"
android:maxLength="12"/>
问题是,我正在使用动作(隐藏键盘),然后用户从微调器中选择然后进入下一个if (!hasFocus) {
if (Utility.checkInput(name) == false) {
Toast.makeText(AddDriverUserActivity.this, "Enter value!",Toast.LENGTH_SHORT).show();
name.requestFocus();
}
}
。因此,在我触摸下一个编辑文本(手机)之前,吐司不显示,然后在两个编辑文本上设置焦点:
重置时:
EditText
到android:imeOptions="actionDone"
它显示吐司,然后进入下一个edittext,如屏幕截图所示,两者都是焦点。
actionNext
不会阻止它从edittext移动。
答案 0 :(得分:1)
// Retain focus - do not allow user to move on.
editText.requestFocus();
答案 1 :(得分:0)
这不是保留focus
EditText
以验证输入的解决方案,但它是检查用户输入的一种优雅方式。
我将所有EditText
添加到array
并将它们传递给循环数组并检查每个输入的方法。
在我的Utility class
:
public static boolean checkAllInput(EditText[] editTexts) {
for (int i = 0; i < editTexts.length; i++) {
if (editTexts[i].getText().length() == 0) {
return false;
}
}
return true;
}
在活动/片段中:
我将EditTexts添加到数组中:
final EditText[] editTexts = {arg1, arg2, arg3, arg4, .../};
然后在我的OnTouchListener
中使用button
中的函数。
addBtn.setOnTouchListener(new View.OnTouchListener() {
@Override public boolean onTouch(View v, MotionEvent event) {
hideKeyboard();
disableButton(addBtn);
if (Utility.checkAllInput(editTexts) == false) {
Toast.makeText(getActivity(), "Enter all fields",
Toast.LENGTH_SHORT).show();
enableButton(addBtn);
} else {
// Do something ..
}
return false;
}
});
我认为这可能对其他人android
工作有帮助。
作为旁注,我一直禁用我的按钮,以防止反复接触:
Using countdown to set button enabled