我正在尝试建立一个系统来验证用户输入,在这种情况下,只是检查用户是否输入了任何内容。
我有一个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
:
public class Utility {
public static boolean checkInput(EditText editText) {
if (editText.getText().length() != 0) {
return true;
}
return false;
}
//.../
如果检查输入返回 false,我感到困惑的是如何保持焦点。我想阻止用户前进。我确信有一个简单的解决方案,但我还没有找到它。
我也想知道
xml
ime.Options
会不会影响这个。
谢谢。
编辑
这是我的xml:
<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();
}
}
问题是,我正在使用 action done (隐藏键盘),因为用户然后从微调器中进行选择,然后继续到下一个EditText
. 因此,在我触摸下一个编辑文本(电话)之前,吐司不会显示,然后将焦点设置在两个编辑文本上:
当我重置时:
android:imeOptions="actionDone"
到actionNext
它显示吐司,然后继续下一个编辑文本,如屏幕截图所示,两者都是焦点。
Request focus
不会阻止它从编辑文本中移动。