当我按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;
}
});
问题是当您按下输入焦点移动到列表视图时,您可以通过按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;
}
会发生什么是在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;
}
您可以使用具有相同EditText视图ID(getId())的setNextFocusDownId设置将关注enter和down键的下一个项目。
在此示例中,条形码是EditText。
barcode.setNextFocusDownId(barcode.getId());
这对我行得通