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 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; public abstract class GenWheelView implements IGenWheelView { /** just for reference **/ protected abstract View genBody(Context context, View convertView, Object element, int position); @Override public View setup(Context context, int position, View convertView, ViewGroup parent, Object data) { if (data instanceof Object[]) { return genBody(context, convertView, ((Object[]) data)[position], position); } else if (data instanceof ArrayList) { return genBody(context, convertView, ((ArrayList) data).get(position), position); } else if (data instanceof LinkedHashMap) { LinkedHashMap map = (LinkedHashMap) data; Iterator iterator = map.entrySet().iterator(); int index = position; while (iterator.hasNext()) { Entry entry = (Entry) iterator.next(); if (entry.getValue() instanceof List) { if (index <= ((List) entry.getValue()).size()) { return genBody(context, convertView, ((List) entry.getValue()).get(index - 1), position); } else { index = index - ((List) entry.getValue()).size() - 1; } } } return null; } else if (data instanceof Cursor) { ((Cursor) data).moveToPosition(position); return genBody(context, convertView, data, position); } else if (data instanceof SparseArray) { return genBody(context, convertView, ((SparseArray) data).valueAt(position), position); } else if (data instanceof SparseBooleanArray) { Boolean checked = ((SparseBooleanArray) data).get(((SparseBooleanArray) data).keyAt(position)); return genBody(context, convertView, checked, position); } else if (data instanceof SparseIntArray) { return genBody(context, convertView, ((SparseIntArray) data).valueAt(position), position); } else if (data instanceof Vector) { return genBody(context, convertView, ((Vector) data).get(position), position); } else if (data instanceof LinkedList) { return genBody(context, convertView, ((LinkedList) data).get(position), position); } else { return convertView; } } }