package org.auie.utils; import java.util.ArrayList; import java.util.List; import android.database.DataSetObservable; import android.database.DataSetObserver; import android.view.View; import android.view.ViewGroup; import android.widget.ListAdapter; import android.widget.SpinnerAdapter; public abstract class UEAdapter implements ListAdapter, SpinnerAdapter { private final DataSetObservable mDataSetObservable = new DataSetObservable(); private Class<?> className; protected List<Object> bckupDatas; protected List<Object> datas; public UEAdapter(List<?> datas){ this.datas = changeObject(datas); this.bckupDatas = this.datas; if (datas != null && datas.size() > 0) { className = datas.get(0).getClass(); } } public List<?> getDatas(){ return datas; } @Override public int getCount() { if (datas == null) { return 0; } return datas.size(); } @Override public Object getItem(int position) { return datas.get(position); } @Override public long getItemId(int position) { return position; } public void refresh(List<?> datas){ if (datas.size() > 0) { className = datas.get(0).getClass(); } this.datas = changeObject(datas); notifyDataSetChanged(); } public void refresh(int position, Object data){ this.datas.set(position, data); notifyDataSetChanged(); } public void reset(){ this.datas.clear(); this.datas = bckupDatas; notifyDataSetChanged(); } private List<Object> changeObject(List<?> datas){ if (datas == null) { return null; } List<Object> objects = new ArrayList<Object>(); if (datas.size() > 0 ) { for (int i = 0; i < datas.size(); i++) { objects.add(datas.get(i)); } } return objects; } public boolean addItem(Object data){ if (className != null) { if (data.getClass() != className) { return false; } }else { className = data.getClass(); } datas.add(data); notifyDataSetChanged(); return true; } public boolean addItems(List<?> datas){ if (datas.size() < 0) { return true; } if (className != null) { if (className != datas.get(0).getClass()) { return false; } }else { className = datas.get(0).getClass(); } this.datas.addAll(changeObject(datas)); notifyDataSetChanged(); return true; } public boolean removeItem(int position){ if (datas.size() > position) { datas.remove(position); notifyDataSetChanged(); return true; } return false; } public boolean removeItem(Object data){ if (datas.contains(data)) { datas.remove(data); notifyDataSetChanged(); return true; } return false; } @Override public void registerDataSetObserver(DataSetObserver observer) { mDataSetObservable.registerObserver(observer); } @Override public void unregisterDataSetObserver(DataSetObserver observer) { mDataSetObservable.unregisterObserver(observer); } @Override public boolean hasStableIds() { return false; } public void notifyDataSetChanged() { mDataSetObservable.notifyChanged(); } public void notifyDataSetInvalidated() { mDataSetObservable.notifyInvalidated(); } public boolean areAllItemsEnabled() { return true; } public boolean isEnabled(int position) { return true; } public View getDropDownView(int position, View convertView, ViewGroup parent) { return getView(position, convertView, parent); } public int getItemViewType(int position) { return 0; } public int getViewTypeCount() { return 1; } public boolean isEmpty() { return getCount() == 0; } }