package com.mfh.comna.comn.logic;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.mfh.comna.comn.bean.ILetterIndexAble;
import com.mfh.comna.comn.bean.KvBean;
public class LetterPageHelper <T extends ILetterIndexAble>{
private Map<String, Integer> selector = new HashMap<String, Integer>();// 键值是索引表的字母,值为对应在listview中的位置
private List<String> blankIndexs = new ArrayList<String>();//还未有关联条目的字母索引
private MyPageListAdapter<T> adapter;
public static String[] indexLetters;
public final static String[] letters = new String[] {
"A", "B", "C", "D", "E", "F", "G",
"H", "I", "J", "K", "L", "M", "N",
"O", "P", "Q", "R", "S", "T",
"U", "V", "W", "X", "Y", "Z"
};
/**
* 构造函数
* @param adapter
* @param params
*/
public LetterPageHelper(MyPageListAdapter<T> adapter, List<KvBean<T>> params, String[] paramLetters) {
if (paramLetters == null)
indexLetters = letters;
else
indexLetters = paramLetters;
initBlankIndexs(indexLetters);
this.adapter = adapter;
if (params != null) {
for (int i = 0; i < params.size(); i++) {
if (blankIndexs.size() == 0)
break;
fillItemIndex(params.get(i));
}
}
}
/**
* 初始化
* @author zhangyz created on 2013-5-11
*/
private void initBlankIndexs(String[] indexLetters) {
blankIndexs.clear();
for (String item : indexLetters)
blankIndexs.add(item);
}
public Map<String, Integer> getSelector() {
return selector;
}
/**
* 对传入的值取其索引字母并填充到索引中
* @param param
* @author zhangyz created on 2013-5-11
*/
private void fillItemIndex(KvBean<T> param){
String letter;
for (int j = blankIndexs.size() - 1; j >= 0; j--) {//循环字母表,找出list中对应字母的位置
letter = blankIndexs.get(j);
if (letter.equals(param.getBean().getLetterIndex())) {
selector.put(letter, adapter.dataItems.indexOf(param));
blankIndexs.remove(j);//每个字母只要有一个对应的
break;
}
}
}
public void addDataItems(List<KvBean<T>> params) {
for (int i = 0; i < params.size(); i++) {
if (blankIndexs.size() == 0)
break;
fillItemIndex(params.get(i));
}
}
public void addDataItems(KvBean<T>[] params) {
for (int i = 0; i < params.length; i++) {
if (blankIndexs.size() == 0)
break;
fillItemIndex(params[i]);
}
}
public void addDataItem(KvBean<T> param) {
fillItemIndex(param);
}
public void clearData() {
selector.clear();
initBlankIndexs(indexLetters);
}
}