作者:手机用户2602923713 | 来源:互联网 | 2023-05-19 16:29
当ListViewitem中含有Edittext时,存在Edittext获取不到焦点的情况,想要达到既能响应Item点击事件,又能响应单独的editText解决
当 ListView item 中含有 Edittext 时,存在 Edittext 获取不到焦点的情况,想要达到既能响应 Item 点击事件, 又能响应单独的 editText
解决方案:
在 listView 的 adapter 里convertView.setOnTouchListener(this);
和holder.editText.setOnTouchListener(this);
然后重写方法 onTouch 进行焦点选择
@Override
public boolean onTouch(View v, MotionEvent event) {
if (v instanceof EditText) {
EditText editText = (EditText) v;
editText.setFocusable(true);
editText.setFocusableInTouchMode(true);
} else {
ViewHolder holder = (ViewHolder) v.getTag();
holder.editText.setFocusable(false);
holder.editText.setFocusableInTouchMode(false);
}
return false;
}
PS: 解释一下为什么是使用 OnTouch, 那是因为: 在 Android 中 View 的触摸事件传递中,View 的 OnTouchListener 调用是早于其他事件的,而且返回值 false, 代表目前事件没有被消耗,继续向下传递,不影响后续事件的处理(这里不影响 EditText 其他事件的处理)
That’s over.