当前位置: 代码迷 >> 移动开发 >> ListView Item 与子控件焦点有关问题
  详细解决方案

ListView Item 与子控件焦点有关问题

热度:9638   发布时间:2013-02-26 00:00:00.0
ListView Item 与子控件焦点问题

在项目中,item中有3个控件,其中有2个控件是可以正常获取到焦点,但是第三个点击的时候,却出发了Item的点击事件。

?

android:descendantFocusability ? // 放在listview中的item的顶级布局上。

?

Constant ? ? ? ? ? ?Value ? ? ? ?Description

beforeDescendants 0 ? ?The ViewGroup will get focus before any of its descendants. //Item先获取到焦点

afterDescendants 1 ? ? ?The ViewGroup will get focus only if none of its descendants want it. //子控件获取到焦点--- 也就是item无法获取到焦点

blocksDescendants 2 ?The ViewGroup will block its descendants from receiving focus. //让子控件无法获取焦点 --事实证明子控件是可以获取到焦点的。

ListView默认情况

?

当item有焦点时,item上的button等子控件获取不到焦点;

当子控件有焦点时,item无焦点无法响应onItemClick事件

?

ViewGroup.FOCUS_AFTER_DESCENDANTS:表示item的子控件优先于item获得焦点;

ViewGroup.FOCUS_BEFORE_DESCENDANTS:表示item优先于其子控件获得焦点。

解决办法:

?

view plainprint?
  1. listView.setOnItemSelectedListener(onItemSelectedListener);??
  2. private?AdapterView.OnItemSelectedListener??onItemSelectedListener?=???
  3. ????new?AdapterView.OnItemSelectedListener(){??
  4. ????@Override??
  5. ????public?void?onItemSelected(AdapterView<?>?parent,?View?view,??
  6. ????????????int?position,?long?id)?{??
  7. ????????//当此选中的item的子控件需要获得焦点时??
  8. ????????parent.setDescendantFocusability(ViewGroup.FOCUS_BEFORE_DESCENDANTS);??
  9. ????????//else?parent.setDescendantFocusability(ViewGroup.FOCUS_BEFORE_DESCENDANTS);??
  10. ????}??
  11. ??????
  12. ????@Override??
  13. ????public?void?onNothingSelected(AdapterView<?>?parent)?{??
  14. ????????parent.setDescendantFocusability(ViewGroup.FOCUS_BEFORE_DESCENDANTS);??
  15. ????}??
  16. } ?
  相关解决方案