您的位置:首页 > 其它

关于焦点冲突的坑

2016-12-02 15:53 190 查看
当 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.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  listview edittext 焦点