在项目中,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优先于其子控件获得焦点。
解决办法:
- listView.setOnItemSelectedListener(onItemSelectedListener);
- private AdapterView.OnItemSelectedListener onItemSelectedListener =
- new AdapterView.OnItemSelectedListener(){
- @Override
- public void onItemSelected(AdapterView<?> parent, View view,
- int position, long id) {
- //当此选中的item的子控件需要获得焦点时
- parent.setDescendantFocusability(ViewGroup.FOCUS_BEFORE_DESCENDANTS);
- //else parent.setDescendantFocusability(ViewGroup.FOCUS_BEFORE_DESCENDANTS);
- }
- @Override
- public void onNothingSelected(AdapterView<?> parent) {
- parent.setDescendantFocusability(ViewGroup.FOCUS_BEFORE_DESCENDANTS);
- }
- }