/*
|
* Copyright (C) 2010 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 com.codbking.widget.genview;
|
|
import android.content.Context;
|
import android.database.Cursor;
|
import android.util.SparseArray;
|
import android.util.SparseBooleanArray;
|
import android.util.SparseIntArray;
|
import android.view.View;
|
import android.view.ViewGroup;
|
|
|
import com.codbking.widget.adapters.AbstractWheelAdapter;
|
|
import java.util.ArrayList;
|
import java.util.Iterator;
|
import java.util.LinkedHashMap;
|
import java.util.LinkedList;
|
import java.util.List;
|
import java.util.Map.Entry;
|
import java.util.Vector;
|
|
/**
|
* 可以顯示特定樣式的滾輪的Adapter,
|
* "Only support List, Map,String Array,Cursor,SparseArray,SparseBooleanArray,SparseIntArray,Vector, and basic data type"
|
*
|
* @author josephWang
|
*
|
*/
|
public class WheelGeneralAdapter extends AbstractWheelAdapter {
|
/**
|
* 資料形態 Enumeration
|
*
|
* @author JosephWang
|
*/
|
public static enum DataType {
|
ARRAYLIST, LINKEDHASHMAP, CURSOR, OBJECT_ARRAY, SPARSE_ARRAY, SPARSE_BOOLEAN_ARRAY, SPARSE_INT_ARRAY, VECTOR, LINKEDLIST, OTHERS;
|
}
|
|
private DataType dataType = DataType.OTHERS;
|
|
/**
|
* 回傳資料形態。
|
*
|
* @return
|
*/
|
public DataType getDataType() {
|
return dataType;
|
}
|
|
private Object data;
|
private GenWheelView generator;
|
|
private Context context;
|
|
public WheelGeneralAdapter(Context context, GenWheelView generator) {
|
this.generator = generator;
|
this.context = context;
|
|
}
|
|
public Object getData() {
|
return data;
|
}
|
|
public void setData(Object object) throws UnSupportedWheelViewException {
|
// Multiple data list without header
|
if (object instanceof ArrayList<?>) {
|
dataType = DataType.ARRAYLIST;
|
} else if (object instanceof LinkedHashMap<?, ?>) {
|
dataType = DataType.LINKEDHASHMAP;
|
} else if (object instanceof Cursor) {
|
dataType = DataType.CURSOR;
|
} else if (object instanceof Object[]) {
|
dataType = DataType.OBJECT_ARRAY;
|
} else if (object instanceof SparseArray<?>) {
|
dataType = DataType.SPARSE_ARRAY;
|
} else if (object instanceof SparseBooleanArray) {
|
dataType = DataType.SPARSE_BOOLEAN_ARRAY;
|
} else if (object instanceof SparseIntArray) {
|
dataType = DataType.SPARSE_INT_ARRAY;
|
} else if (object instanceof Vector<?>) {
|
dataType = DataType.VECTOR;
|
} else if (object instanceof LinkedList<?>) {
|
dataType = DataType.LINKEDLIST;
|
} else {
|
throw new UnSupportedWheelViewException();
|
}
|
data = object;
|
}
|
|
public void setData(Object[] object) {
|
dataType = DataType.OBJECT_ARRAY;
|
data = object;
|
}
|
|
public void setData(ArrayList<?> object) {
|
dataType = DataType.ARRAYLIST;
|
data = object;
|
}
|
|
public void setData(Vector<?> object) {
|
dataType = DataType.VECTOR;
|
data = object;
|
}
|
|
public void setData(SparseArray<?> object) {
|
dataType = DataType.SPARSE_ARRAY;
|
data = object;
|
}
|
|
public void setData(LinkedList<?> object) {
|
dataType = DataType.LINKEDLIST;
|
data = object;
|
}
|
|
public int getCountWithoutHeader() {
|
int count = 0;
|
switch (dataType) {
|
case ARRAYLIST:
|
count = ((ArrayList<?>) data).size();
|
break;
|
case LINKEDHASHMAP:
|
Iterator<?> iterator = ((LinkedHashMap<?, ?>) data).entrySet().iterator();
|
while (iterator.hasNext()) {
|
Entry<?, ?> entry = (Entry<?, ?>) iterator.next();
|
if (entry.getValue() instanceof List) {
|
count = count + ((List<?>) entry.getValue()).size();
|
}
|
}
|
break;
|
case CURSOR:
|
count = ((Cursor) data).getCount();
|
break;
|
case OBJECT_ARRAY:
|
count = ((Object[]) data).length;
|
break;
|
case SPARSE_ARRAY:
|
count = ((SparseArray<?>) data).size();
|
break;
|
case SPARSE_BOOLEAN_ARRAY:
|
count = ((SparseBooleanArray) data).size();
|
break;
|
case SPARSE_INT_ARRAY:
|
count = ((SparseIntArray) data).size();
|
break;
|
case VECTOR:
|
count = ((Vector<?>) data).size();
|
break;
|
case LINKEDLIST:
|
count = ((LinkedList<?>) data).size();
|
break;
|
default:
|
break;
|
}
|
return count;
|
}
|
|
@Override
|
public int getItemsCount() {
|
switch (dataType) {
|
case ARRAYLIST:
|
return ((ArrayList<?>) data).size();
|
case LINKEDHASHMAP:
|
// All elements count (include key)
|
int count = 0;
|
Iterator<?> iterator = ((LinkedHashMap<?, ?>) data).entrySet().iterator();
|
while (iterator.hasNext()) {
|
Entry<?, ?> entry = (Entry<?, ?>) iterator.next();
|
if (entry.getValue() instanceof List) {
|
count = count + 1 + ((List<?>) entry.getValue()).size();
|
}
|
}
|
return count;
|
case CURSOR:
|
return ((Cursor) data).getCount();
|
case OBJECT_ARRAY:
|
return ((Object[]) data).length;
|
case SPARSE_ARRAY:
|
return ((SparseArray<?>) data).size();
|
case SPARSE_BOOLEAN_ARRAY:
|
return ((SparseBooleanArray) data).size();
|
case SPARSE_INT_ARRAY:
|
return ((SparseIntArray) data).size();
|
case VECTOR:
|
return ((Vector<?>) data).size();
|
case LINKEDLIST:
|
return ((LinkedList<?>) data).size();
|
default:
|
return 0;
|
}
|
}
|
|
@Override
|
public View getItem(int position, View convertView, ViewGroup parent) {
|
return generator.setup(context, position, convertView, parent, data);
|
}
|
}
|