今天在写ListView时,由于item中包含了CheckBox子控件,导致在点击item时候onItemClickListener中的onItemClick()方法没有响应。
Google后了解到是item中的控件首先获得了焦点(FOCUS),这样onItemClick()就不会执行。可获取焦点的控件有Button,CheckBox等。
那么如果要让onItemClick()能执行该如何做呢?
可在item的layout中增加
android:descendantFocusability=”blocksDescendants”
这样就阻止了所有子控件获取焦点的权限
public void requestChildFocus(View child, View focused) {
...
if (getDescendantFocusability() == FOCUS_BLOCK_DESCENDANTS) {
return;
}
...
}
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_AFTER_DESCENDANTS);
//else parent.setDescendantFocusability(
ViewGroup.FOCUS_BEFORE_DESCENDANTS);
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
parent.setDescendantFocusability(
ViewGroup.FOCUS_BEFORE_DESCENDANTS);
}
}