Java 在OnFocusChanged侦听器中保持对Edittext的关注
我试图建立一个系统来验证用户输入,在本例中,只是检查用户是否输入了任何内容 我有一个Java 在OnFocusChanged侦听器中保持对Edittext的关注,java,android,focus,setfocus,imeoptions,Java,Android,Focus,Setfocus,Imeoptions,我试图建立一个系统来验证用户输入,在本例中,只是检查用户是否输入了任何内容 我有一个实用程序类,它检查编辑文本是否有数据 我正在使用一个onfocuschangelister,然后从实用程序类调用该方法 这是活动中的代码: editText = (EditText) view.findViewById(R.id.editText); editText.setOnFocusChangeListener(new View.OnFocusChangeListener() { @
实用程序类
,它检查编辑文本
是否有数据
我正在使用一个onfocuschangelister
,然后从实用程序类
调用该方法
这是活动
中的代码:
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...
}
}
}
});
这是来自实用程序类的代码:
public class Utility {
public static boolean checkInput(EditText editText) {
if (editText.getText().length() != 0) {
return true;
}
return false;
}
//.../
public static boolean checkAllInput(EditText[] editTexts) {
for (int i = 0; i < editTexts.length; i++) {
if (editTexts[i].getText().length() == 0) {
return false;
}
}
return true;
}
我遇到的难题是,如果检查输入返回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"/>
问题是,我使用的是action done(隐藏键盘),用户从微调器中选择,然后进入下一个EditText
。因此,在我触摸下一个编辑文本(手机)并将焦点设置为两个编辑文本之前,祝酒词不会显示:
当我重置时:
android:imeOptions=“actionDone”
到actionNext
显示烤面包片,然后进入下一个编辑文本,如屏幕截图所示,两个文本都聚焦
请求焦点
不会阻止它从编辑文本中移动。使用
这不是在EditText
中保留focus
以验证输入的解决方案,但它是检查用户输入的一种优雅方式
我将所有的EditText
s添加到数组
中,并将它们传递给一个方法,该方法在数组中循环并检查每个输入
在我的实用程序类中
:
public class Utility {
public static boolean checkInput(EditText editText) {
if (editText.getText().length() != 0) {
return true;
}
return false;
}
//.../
public static boolean checkAllInput(EditText[] editTexts) {
for (int i = 0; i < editTexts.length; i++) {
if (editTexts[i].getText().length() == 0) {
return false;
}
}
return true;
}
然后将myOnTouchListener
中的功能用于按钮
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
工作的人有所帮助
作为补充说明,我一直在禁用我的按钮,以防止重复触摸:
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;
}
});