package com.likebamboo.osa.android.ui.adapter;
import android.content.Context;
import android.util.SparseBooleanArray;
import java.util.ArrayList;
/**
* 带选择的adapter
* Created by wentaoli on 2015/6/12.
*/
public abstract class ChoiceAdapter<T> extends BaseAdapter<T> {
/**
* 选中项
*/
protected SparseBooleanArray mSelectedPositions = new SparseBooleanArray();
public ChoiceAdapter(Context ctx) {
super(ctx);
}
public ChoiceAdapter(Context ctx, ArrayList<T> datas) {
super(ctx, datas);
}
/**
* 判断某一项是否选中
*
* @param position 位置
* @return
*/
public boolean isItemSelected(int position) {
return mSelectedPositions.get(position, false);
}
/**
* 设置选中项
*
* @param position 位置
* @param selected 选中or未选中
*/
public void setItemSelected(int position, boolean selected) {
boolean sel = mSelectedPositions.get(position, false);
if (sel == selected) {
return;
}
// 选中
if (selected) {
mSelectedPositions.put(position, true);
} else {
// 取消选中
mSelectedPositions.delete(position);
}
notifyDataSetChanged();
}
/**
* 设置全选or全部取消
*
* @param selectedAll
*/
public void setSelectedAll(boolean selectedAll) {
// 全选
if (selectedAll) {
for (int i = 0; i < getCount(); i++) {
mSelectedPositions.put(i, true);
}
} else {
// 全不选
mSelectedPositions.clear();
}
notifyDataSetChanged();
}
/**
* 获取选中的项数。
*
* @return
*/
public int getSelectedCount() {
int result = 0;
for (int i = 0; i < getCount(); i++) {
if (mSelectedPositions.get(i, false)) {
++result;
}
}
return result;
}
/**
* 获取选中的项的id
*
* @return
*/
public ArrayList<Integer> getSelectedPositions() {
ArrayList<Integer> result = new ArrayList<>();
for (int i = 0; i < getCount(); i++) {
if (mSelectedPositions.get(i, false)) {
result.add(i);
}
}
return result;
}
}