按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;
}
});
答案 0 :(得分: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 :(得分: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;
}
答案 2 :(得分:1)
您可以使用setNextFocusDownId设置下一个专注于Enter和向下键的项目 具有相同的EditText视图ID(getId())。
在此示例中,条形码为EditText。
barcode.setNextFocusDownId(barcode.getId());
对我有用