关于焦点冲突的坑

    xiaoxiao2021-12-14  18

    当 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.

    转载请注明原文地址: https://ju.6miu.com/read-965264.html

    最新回复(0)