I'm having hard time understanding descendantFocusability. Very particulary afterDescendants.
Could someone show me an example of when this would be useful?
1 Answer
Defines the relationship between the ViewGroup and its descendants when looking for a View to take focus.
Must be one of the following constant values.
+------------------------------------------------------------------------------------------+ | Constant Value Description | +------------------------------------------------------------------------------------------+ | afterDescendants 1 The ViewGroup will get focus only if | | none of its descendants want it. | +------------------------------------------------------------------------------------------+ | beforeDescendants 0 The ViewGroup will get focus before | | any of its descendants. | +------------------------------------------------------------------------------------------+ | blocksDescendants 2 The ViewGroup will block its descendants from | | receiving focus. | +------------------------------------------------------------------------------------------+
You can check the complete example here.
The snippet is :
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(); } }
}As per the above snippet, afterDescendants is used to prevent listview from getting focus, so that either EditText or Button can request focus.
Note: The link provided above is broken. Please refer to my Gist for the code
2