Android Studio Edittext requestFocus()无法正常工作?

时间:2018-07-25 03:26:51

标签: android android-studio android-edittext

我整天都在搜索,请尝试建立大多数解决方案,但仍然无法正常工作。 EditText上有Android的错误吗?

我有2个EditText字段(称为edtA and edtB),edtA是必填字段。当我将edtA留空并输入edtB,然后按Enter时,我希望它集中回到edtA并显示错误弹出窗口“必填字段为空!”。

enter image description here

但是现在,光标仍停留在edtB, edtA中,并没有显示错误popup

enter image description here

edtB按下Enter键时,这是我的代码,上面已经提到了edtNO_CON的内容:

edtNO_CAR.setOnKeyListener(new View.OnKeyListener() {
        @Override
        public boolean onKey(View v, int keyCode, KeyEvent event) {
            if (event.getAction() == KeyEvent.ACTION_DOWN) {
                if (keyCode == KeyEvent.KEYCODE_ENTER) {
                    if (TextUtils.isEmpty(mNoCon)) {
                        edtNO_CON.requestFocus();
                        edtNO_CON.setError(getString(R.string.error_field_required));
                    } else if (edtNO_CAR.getText().toString().trim().length() > 0) {
                        // Do something
                    }
                }
            }
            return true;
        }
    });

这是edtA的XML:

<EditText
        android:id="@+id/confirmNO_CONTAINER"
        style="@style/text14Black"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="0.7"
        android:includeFontPadding="false"
        android:maxLines="1"
        android:singleLine="true" />

任何人都可以帮忙吗? 谢谢您的时间。

更新: 在尝试了所有建议但没有任何变化之后,我决定使用setOnEditorActionListener代替setOnKeyListener,现在可以使用了! 这是我更新的代码:

edtNO_CAR.setOnEditorActionListener(new TextView.OnEditorActionListener() {
        @Override
        public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
            if (actionId == EditorInfo.IME_ACTION_NEXT
                    || event.getAction() == KeyEvent.ACTION_DOWN && event.getKeyCode() == KeyEvent.KEYCODE_ENTER) {
                String strNoCon = edtNO_CON.getText().toString().trim();
                if (TextUtils.isEmpty(strNoCon)) {
                    edtNO_CON.requestFocus();
                    edtNO_CON.setError(getString(R.string.error_field_required));
                } else if (edtNO_CAR.getText().toString().trim().length() > 0) {
                    // Do something
                }
            }
            return true;
        }
    });

3 个答案:

答案 0 :(得分:0)

首先调用setEror,然后调用requestFocus

答案 1 :(得分:0)

尝试添加以下两行:

android:focusable =“ true” android:cursorVisible =“ true”

如果它不起作用。请更新。

答案 2 :(得分:0)

这可能会帮助您!尝试一下。 #answer