diff --git a/core/java/android/view/FocusFinder.java b/core/java/android/view/FocusFinder.java index 1ccf16a64ade5..48e5ca9a20f4c 100644 --- a/core/java/android/view/FocusFinder.java +++ b/core/java/android/view/FocusFinder.java @@ -193,10 +193,14 @@ public class FocusFinder { private View findNextUserSpecifiedFocus(ViewGroup root, View focused, int direction) { // check for user specified next focus View userSetNextFocus = focused.findUserSetNextFocus(root, direction); - if (userSetNextFocus != null && userSetNextFocus.isFocusable() - && (!userSetNextFocus.isInTouchMode() - || userSetNextFocus.isFocusableInTouchMode())) { - return userSetNextFocus; + while (userSetNextFocus != null) { + if (userSetNextFocus.isFocusable() + && userSetNextFocus.getVisibility() == View.VISIBLE + && (!userSetNextFocus.isInTouchMode() + || userSetNextFocus.isFocusableInTouchMode())) { + return userSetNextFocus; + } + userSetNextFocus = userSetNextFocus.findUserSetNextFocus(root, direction); } return null; }