package com.freelib.multiitem.adapter.holder;
/**
* 多个ViewHolder的管理类的组合
* 主要为相同数据源根据内部属性的值会对应多个ViewHolderManager设计,常见的如聊天界面的消息
* Created by free46000 on 2017/3/20.
*/
public abstract class ViewHolderManagerGroup<T> {
private ViewHolderManager[] viewHolderManagers;
/**
* @param viewHolderManagers 相同数据源对应的所有ViewHolderManager
*/
public ViewHolderManagerGroup(ViewHolderManager... viewHolderManagers) {
if (viewHolderManagers == null || viewHolderManagers.length == 0) {
throw new IllegalArgumentException("viewHolderManagers can not be null");
}
this.viewHolderManagers = viewHolderManagers;
}
/**
* 根据item数据源中的属性判断应该返回的对应viewHolderManagers的index值
*
* @param itemData item数据源
* @return index值应该是在viewHolderManagers数组有效范围内
*/
public abstract int getViewHolderManagerIndex(T itemData);
/**
* 根据item数据源中的属性判断应该返回的对应viewHolderManager
*
* @param itemData item数据源
* @return viewHolderManager
*/
public ViewHolderManager getViewHolderManager(T itemData) {
int index = getViewHolderManagerIndex(itemData);
if (index < 0 || index > viewHolderManagers.length - 1) {
throw new IllegalArgumentException("ViewHolderManagerGroup中的getViewHolderManagerIndex方法返回的index必须在有效范围内");
}
return viewHolderManagers[index];
}
/**
* 通过viewHolderManager获取标识字符串,为了方便查找ViewHolderManager
*
* @param viewHolderManager ViewHolderManager
* @return 获取viewHolderManager标识字符串
*/
public String getViewHolderManagerTag(ViewHolderManager viewHolderManager) {
return viewHolderManager.getClass().getName();
}
public ViewHolderManager[] getViewHolderManagers() {
return viewHolderManagers;
}
}