EditText停止关注输入键

问题描述 投票:0回答:3

当我按Enter键EditText失去焦点时

和Listview的第一个项目突出显示但没有发生任何事件 1)未找到ListView焦点更改 2)没有发生ItemCLick事件以及滚动ListView突出显示的项目也消失了

如何防止在Enter键上失去EditText的焦点并停止突出显示

下面是我的xml和Java代码

<EditText
android:id="@+id/et_scanitemcode"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="60"
android:background="@drawable/edittext_background"
android:gravity="right|center_vertical"
android:maxLines="1"
android:paddingLeft="5dp"
android:textColor="@drawable/edittext_color_background" />


<ListView
android:id="@+id/lst_salesScannedItems"
android:layout_width="match_parent"
android:layout_height="match_parent"/>

et_scanitemcode.setOnKeyListener(new EditText.OnKeyListener() {
            public boolean onKey(View v, int keyCode, KeyEvent event) {
                Log.i("==>",""+KeyEvent.keyCodeToString(event.getAction()));
                Log.i("==>",""+keyCode);
                // If the event is a key-down event on the "enter" button
                //This is the filter


                if (event.getAction()==KeyEvent.ACTION_DOWN && keyCode == KeyEvent.KEYCODE_ENTER) {
                    // Perform action on key press
                    String scanItemCode = et_scanitemcode.getText().toString().trim();


                    return true;
                }
                return false;
            }
        });
android android-layout listview android-edittext
3个回答
1
投票

问题是当您按下输入焦点移动到列表视图时,您可以通过按Enter键将列表视图的焦点设置为FALSE来防止这种情况。

listView.setFocusable(false);

所以你的代码看起来像这样

            if (event.getAction()==KeyEvent.ACTION_DOWN && keyCode == KeyEvent.KEYCODE_ENTER) {
                // Perform action on key press
                String scanItemCode = et_scanitemcode.getText().toString().trim();

                listView.setFocusable(false);
                return true;
            }

1
投票

会发生什么是在ACTION_DOWN之后,触发KeyEvent.ACTION_UP导致控件失去焦点。你必须照顾这两个事件。

这对我有用

@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_ENTER) {
        if (event.getAction() == KeyEvent.ACTION_DOWN){
            //your code here
        }
        return true;
    }
    return false;
}

1
投票

您可以使用具有相同EditText视图ID(getId())的setNextFocusDownId设置将关注enter和down键的下一个项目。

在此示例中,条形码是EditText。

barcode.setNextFocusDownId(barcode.getId());

这对我行得通

© www.soinside.com 2019 - 2024. All rights reserved.