/*
* Copyright (C) 2007 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.database.DataSetObserver;
import android.view.View;
import android.view.ViewGroup;
/**
* 这个适配器在 {@link ExpandableListView} 和底层数据之间起到了一个衔接的作用.
* 该接口的实现类提供了访问子元素(以组的形式将它们分类)的数据;
* 同时,也提供了为子元素和组创建相应的{@link View 视图}的功能.
*/
public interface ExpandableListAdapter {
/**
* @see Adapter#registerDataSetObserver(DataSetObserver)
*/
void registerDataSetObserver(DataSetObserver observer);
/**
* @see Adapter#unregisterDataSetObserver(DataSetObserver)
*/
void unregisterDataSetObserver(DataSetObserver observer);
/**
* 取得分组数.
*
* @return 分组数.
*/
int getGroupCount();
/**
* 取得指定分组的子元素数.
*
* @param groupPosition 要取得子元素个数的分组位置.
* @return 指定分组的子元素个数.
*/
int getChildrenCount(int groupPosition);
/**
* 取得与给定分组关联的数据.
*
* @param groupPosition 分组的位置.
* @return 指定分组的数据.
*/
Object getGroup(int groupPosition);
/**
* 取得与指定分组、指定子项目关联的数据.
*
* @param groupPosition 包含子视图的分组的位置.
* @param childPosition 指定的分组中的子视图的位置.
* @return 与子视图关联的数据.
*/
Object getChild(int groupPosition, int childPosition);
/**
* 取得指定分组的ID.该组ID必须在组中是唯一的.组合的ID
* (参见{@link #getCombinedGroupId(long)})
* 必须不同于其他所有ID(分组及子项目的ID).
*
* @param groupPosition 要取得ID的分组位置.
* @return 与分组关联的ID.
*/
long getGroupId(int groupPosition);
/**
* 取得给定分组中给定子视图的ID. 该组ID必须在组中是唯一的.组合的ID
* (参见{@link #getCombinedGroupId(long)})
* 必须不同于其他所有ID(分组及子项目的ID).
*
* @param groupPosition 包含子视图的分组的位置.
* @param childPosition 要取得ID的指定的分组中的子视图的位置.
* @return 与子视图关联的ID.
*/
long getChildId(int groupPosition, int childPosition);
/**
* 是否指定分组视图及其子视图的ID对应的后台数据改变也会保持该ID.
*
* @return 是否相同的ID总是指向同一个对象.
* @see Adapter#hasStableIds()
*/
boolean hasStableIds();
/**
* 取得用于显示给定分组的视图. 这个方法仅返回分组的视图对象,
* 要想获取子元素的视图对象,就需要调用
* {@link #getChildView(int, int, boolean, View, ViewGroup)}.
*
* @param groupPosition 决定返回哪个视图的组位置 .
* @param isExpanded 该组是展开状态还是收起状态 .
* @param convertView 如果可能,重用旧的视图对象.
* 使用前你应该保证视图对象为非空,并且是否是合适的类型.
* 如果该对象不能转换为可以正确显示数据的视图,该方法就创建新视图.
* 不保证使用先前由
* {@link #getGroupView(int, boolean, View, ViewGroup)}创建的视图.
* @param parent 该视图最终从属的父视图.
* @return 指定位置相应的组视图.
*/
View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent);
/**
* 取得显示给定分组给定子位置的数据用的视图.
*
* @param groupPosition 包含要取得子视图的分组位置.
* @param childPosition 分组中子视图(要返回的视图)的位置.
* @param isLastChild 该视图是否为组中的最后一个视图.
* @param convertView 如果可能,重用旧的视图对象.
* 使用前你应该保证视图对象为非空,并且是否是合适的类型.
* 如果该对象不能转换为可以正确显示数据的视图,该方法就创建新视图.
* 不保证使用先前由
* {@link #getChildView(int, int, boolean, View, ViewGroup)}
* 创建的视图.
* @param parent 该视图最终从属的父视图.
* @return 指定位置相应的子视图.
*/
View getChildView(int groupPosition, int childPosition, boolean isLastChild,
View convertView, ViewGroup parent);
/**
* 指定位置的子视图是否可选择.
*
* @param groupPosition 包含要取得子视图的分组位置.
* @param childPosition 分组中子视图的位置.
* @return 是否子视图可选择.
*/
boolean isChildSelectable(int groupPosition, int childPosition);
/**
* @see ListAdapter#areAllItemsEnabled()
*/
boolean areAllItemsEnabled();
/**
* @see ListAdapter#isEmpty()
*/
boolean isEmpty();
/**
* 分组展开时调用.
*
* @param groupPosition 展开的分组.
*/
void onGroupExpanded(int groupPosition);
/**
* 分组收起时调用.
*
* @param groupPosition 收起的分组.
*/
void onGroupCollapsed(int groupPosition);
/**
* 取得一览中可以唯一识别子条目的 ID(包括分组ID和子条目ID).可扩展列表要求每个条目
* (分组条目和子条目)具有一个可以唯一识别列表中子条目和分组条目的ID.
* 该方法根据给定子条目ID和分组条目ID返回唯一识别ID.另外,如果
* {@link #hasStableIds()} 为真,该函数返回的ID必须是固定不变的.
*
* @param groupId 包含子条目ID的分组条目ID.
* @param childId 子条目的ID.
* @return 返回可以在所有分组条目和子条目中唯一识别该子条目的ID
* (可能是固定不变的).
*/
long getCombinedChildId(long groupId, long childId);
/**
* 取得一览中可以唯一识别子条目的 ID(包括分组ID和子条目ID).可扩展列表要求每个条目
* (分组条目和子条目)具有一个可以唯一识别列表中子条目和分组条目的ID.
* 该方法根据给定子条目ID和分组条目ID返回唯一识别ID.另外,如果
* {@link #hasStableIds()} 为真,该函数返回的ID必须是固定不变的.
*
* @param groupId 分组条目ID.
* @return 返回可以在所有分组条目和子条目中唯一识别该分组条目的ID
* (可能是固定不变的).
*/
long getCombinedGroupId(long groupId);
}