content: /*
   * Copyright (C) 2006 The Android Open Source Project
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   *      http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  
  package android.widget;
  
  import android.view.View;
  import android.view.ViewGroup;
  
  /**
   * Additional methods that when implemented make an
   * {@link ExpandableListAdapter} take advantage of the {@link Adapter} view type
   * mechanism.
   * <p>
   * An {@link ExpandableListAdapter} declares it has one view type for its group items
   * and one view type for its child items. Although adapted for most {@link ExpandableListView}s,
   * these values should be tuned for heterogeneous {@link ExpandableListView}s.
   * </p>
   * Lists that contain different types of group and/or child item views, should use an adapter that
   * implements this interface. This way, the recycled views that will be provided to
   * {@link android.widget.ExpandableListAdapter#getGroupView(int, boolean, View, ViewGroup)}
   * and
   * {@link android.widget.ExpandableListAdapter#getChildView(int, int, boolean, View, ViewGroup)}
   * will be of the appropriate group or child type, resulting in a more efficient reuse of the
   * previously created views.
   */
  public interface HeterogeneousExpandableList {
      /**
       * Get the type of group View that will be created by
       * {@link android.widget.ExpandableListAdapter#getGroupView(int, boolean, View, ViewGroup)}
       * . for the specified group item.
       * 
       * @param groupPosition the position of the group for which the type should be returned.
       * @return An integer representing the type of group View. Two group views should share the same
       *         type if one can be converted to the other in
       *         {@link android.widget.ExpandableListAdapter#getGroupView(int, boolean, View, ViewGroup)}
       *         . Note: Integers must be in the range 0 to {@link #getGroupTypeCount} - 1.
       *         {@link android.widget.Adapter#IGNORE_ITEM_VIEW_TYPE} can also be returned.
       * @see android.widget.Adapter#IGNORE_ITEM_VIEW_TYPE
       * @see #getGroupTypeCount()
       */
      int getGroupType(int groupPosition);
  
      /**
       * Get the type of child View that will be created by
       * {@link android.widget.ExpandableListAdapter#getChildView(int, int, boolean, View, ViewGroup)}
       * for the specified child item.
       * 
       * @param groupPosition the position of the group that the child resides in
       * @param childPosition the position of the child with respect to other children in the group
       * @return An integer representing the type of child View. Two child views should share the same
       *         type if one can be converted to the other in
       *         {@link android.widget.ExpandableListAdapter#getChildView(int, int, boolean, View, ViewGroup)}
       *         Note: Integers must be in the range 0 to {@link #getChildTypeCount} - 1.
       *         {@link android.widget.Adapter#IGNORE_ITEM_VIEW_TYPE} can also be returned.
       * @see android.widget.Adapter#IGNORE_ITEM_VIEW_TYPE
       * @see #getChildTypeCount()
       */
      int getChildType(int groupPosition, int childPosition);
  
      /**
       * <p>
       * Returns the number of types of group Views that will be created by
       * {@link android.widget.ExpandableListAdapter#getGroupView(int, boolean, View, ViewGroup)}
       * . Each type represents a set of views that can be converted in
       * {@link android.widget.ExpandableListAdapter#getGroupView(int, boolean, View, ViewGroup)}
       * . If the adapter always returns the same type of View for all group items, this method should
       * return 1.
       * </p>
       * This method will only be called when the adapter is set on the {@link AdapterView}.
       * 
       * @return The number of types of group Views that will be created by this adapter.
       * @see #getChildTypeCount()
       * @see #getGroupType(int)
       */
      int getGroupTypeCount();
  
      /**
       * <p>
       * Returns the number of types of child Views that will be created by
       * {@link android.widget.ExpandableListAdapter#getChildView(int, int, boolean, View, ViewGroup)}
       * . Each type represents a set of views that can be converted in
       * {@link android.widget.ExpandableListAdapter#getChildView(int, int, boolean, View, ViewGroup)}
       * , for any group. If the adapter always returns the same type of View for
       * all child items, this method should return 1.
       * </p>
       * This method will only be called when the adapter is set on the {@link AdapterView}.
       * 
       * @return The total number of types of child Views that will be created by this adapter.
       * @see #getGroupTypeCount()
       * @see #getChildType(int, int)
       */
      int getChildTypeCount();
  }
  