这个方法一般用在ViewGroup上面,主要是拦截焦点,是自己消费还是交给子View消费;
一共传入三个常量
常量 | 值 | 解释 |
---|---|---|
FOCUS_AFTER_DESCENDANTS | 1 | 如果子View都不想要焦点,就交给ViewGroup处理 |
FOCUS_BEFORE_DESCENDANTS | 0 | ViewGroup自身先处理焦点 |
FOCUS_BLOCK_DESCENDANTS | 2 | 阻止其后代获得焦点,即使它们是可聚焦的。 |
例子:
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id) {
ListView listView = getListView();
Log.d(TAG, "onItemSelected gave us " + view.toString());
Button b = (Button) view.findViewById(R.id.button);
EditText et = (EditText) view.findViewById(R.id.editor);
if (b != null || et != null) {
// Use afterDescendants to keep ListView from getting focus
listView.setDescendantFocusability(ViewGroup.FOCUS_AFTER_DESCENDANTS);
if(et!=null) et.requestFocus();
else if(b!=null) b.requestFocus();
} else {
if (!listView.isFocused()) {
// Use beforeDescendants so that previous selections don't re-take focus
listView.setDescendantFocusability(ViewGroup.FOCUS_BEFORE_DESCENDANTS);
listView.requestFocus();
}
}
}