我有一个包含EditText
和ListView
的活动。EditText.TextChangedListener
的实现是在用户输入文本时从数据库中填充ListView
。
我想实现ListView.OnItemClickListener
在这样一种方式,它有相同的效果,按下提交在软键盘:当用户选择一个条目在ListView,软键盘消失,EditText
失去焦点。
// MainActivity.java
public class MainActivity extends AppCompatActivity {
EditText myEditText;
ListView myListView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myEditText = findViewById(R.id.my_edit_text);
myEditText.setOnTextChangedListener(
(s, start, before, count) -> populateMyListView(s)
);
myListView = findViewById(R.id.my_list_view);
myListView.setOnItemClickListener(
(parent, view, position, id) -> submitMyEditText()
);
}
}
我的问题是,你将如何实现submitMyEditText()
?
试试这个。如果出现错误,请在此处注释。
public void submitMyEditText(View view,EditText myEditText){
hideSoftKeyBoard(view.getContext(),myEditText);
myEditText.clearFocus();
}
在公共类中为hole项目创建这个函数
public static void hideSoftKeyBoard(Context context,View view){
InputMethodManager imm = (InputMethodManager) context.getSystemService(Activity.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
}
所以实际上在Android中EditText并没有失去隐藏软键盘的重点。它保持焦点,但不再显示键盘。选择让它失去焦点并没有什么错,但如果你这样做,行为就会不匹配。
要清除焦点,使用editText.clearFocus()。
隐藏键盘,使用
InputMethodManager imm = (InputMethodManager) activity.getSystemService(Activity.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(editText.getWindowToken(), 0);