ItemGroup extends AbstractItemHierarchy implements ItemInflater.ItemParent,
        ItemHierarchy.Observer { @Override public ItemHierarchy findItemById(int id) { if (id == getId()) { return this; } for (ItemHierarchy child : mChildren) { ItemHierarchy childFindItem = child.findItemById(id); if (childFindItem != null) { return childFindItem; } } return null; } ItemGroup();  ItemGroup(Context context, AttributeSet attrs); @Override void addChild(ItemHierarchy child); boolean removeChild(ItemHierarchy child); void clear(); @Override int getCount(); @Override IItem getItemAt(int position); @Override void onChanged(ItemHierarchy hierarchy); @Override void onItemRangeChanged(ItemHierarchy itemHierarchy, int positionStart, int itemCount); @Override void onItemRangeInserted(ItemHierarchy itemHierarchy, int positionStart, int itemCount); @Override void onItemRangeMoved(ItemHierarchy itemHierarchy, int fromPosition, int toPosition,
            int itemCount); @Override void onItemRangeRemoved(ItemHierarchy itemHierarchy, int positionStart, int itemCount); @Override ItemHierarchy findItemById(int id);  }
@Test public void testFindItemById() { CHILD_1.setId(12345); CHILD_2.setId(23456); mItemGroup.addChild(CHILD_1); mItemGroup.addChild(CHILD_2); assertSame("Find item 23456 should return child 2", CHILD_2, mItemGroup.findItemById(23456)); }