private static boolean findDescendentRecusive(View parentView, Viewable descendentView, Stack<View> stack) { stack.push(parentView); boolean found = false; for (View view : parentView.getViews()) { if (view == descendentView) { return true; } found = findDescendentRecusive(view, descendentView, stack); if (found) { break; } } if (!found) { stack.pop(); return false; } return true; }
/** * Find the descendent view in the view tree under the parent view returning the list of view nodes * between the parent view and the descendent view. Returns null if the descendent view is not found. * Returns an empty list if the descendent view is a child view of the parent view. * @param parentView is the view to start searching under * @param descendentView is the view to find * @return list of Viewable nodes between parent and descendent view. */ public static List<View> findDescendent(Viewable parentView, Viewable descendentView) { Stack<View> stack = new Stack<View>(); boolean found; for (View view : parentView.getViews()) { if (view == descendentView) { return stack; } found = findDescendentRecusive(view, descendentView, stack); if (found) { return stack; } } return null; }