继续关注OnFocusChanged Listener中的Edittext

时间:2015-07-19 02:36:02

标签: java android focus setfocus imeoptions

我正在尝试设置一个系统来验证用户输入,在这种情况下,只是检查用户输入的内容。

我有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
  1. 我难倒的地方是如果检查输入返回false,如何保持焦点。我想阻止用户前进。我确信有一个简单的解决方案,但我还没有找到它。

  2. 我也想知道public class Utility { public static boolean checkInput(EditText editText) { if (editText.getText().length() != 0) { return true; } return false; } //.../ xml是否会影响这一点 感谢。

  3. 修改

    这是我的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(); } } 。因此,在我触摸下一个编辑文本(手机)之前,吐司不显示,然后在两个编辑文本上设置焦点:

    enter image description here

    重置时:

    EditTextandroid:imeOptions="actionDone"它显示吐司,然后进入下一个edittext,如屏幕截图所示,两者都是焦点。

    actionNext不会阻止它从edittext移动。

2 个答案:

答案 0 :(得分:1)

使用View.requestFocus()

// 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