package tellh.com.gitclub.presentation.view.adapter;
import android.database.DataSetObservable;
import android.database.DataSetObserver;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.Spinner;
import android.widget.SpinnerAdapter;
import java.util.ArrayList;
import java.util.List;
public class EasySpinnerAdapter<T extends EasySpinnerAdapter.SpinnerEntity> implements SpinnerAdapter {
private List<T> mList;
private final DataSetObservable mDataSetObservable = new DataSetObservable();
public EasySpinnerAdapter(Spinner spinner, onItemSelectedListener<T> onItemSelectedListener) {
this(spinner, onItemSelectedListener, new ArrayList<T>());
}
public EasySpinnerAdapter(Spinner spinner, onItemSelectedListener<T> onItemSelectedListener, List<T> mList) {
this.mList = mList;
spinner.setOnItemSelectedListener(new OnSpinnerEntitySelectedListener(onItemSelectedListener));
}
@Override
public void registerDataSetObserver(DataSetObserver observer) {
mDataSetObservable.registerObserver(observer);
}
@Override
public void unregisterDataSetObserver(DataSetObserver observer) {
mDataSetObservable.unregisterObserver(observer);
}
@Override
public int getCount() {
return mList.size();
}
@Override
public Object getItem(int position) {
return mList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public boolean hasStableIds() {
return false;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null)
convertView = mList.get(position).createEntityView(position, parent);
return convertView;
}
@Override
public int getItemViewType(int position) {
return 1;
}
@Override
public int getViewTypeCount() {
return 1;
}
@Override
public boolean isEmpty() {
return false;
}
@Override
public View getDropDownView(int position, View convertView, ViewGroup parent) {
if (convertView == null)
convertView = mList.get(position).createEntityView(position, parent);
return convertView;
}
public void notifyDataSetChanged() {
mDataSetObservable.notifyChanged();
}
public void addEntity(T entity) {
mList.add(entity);
notifyDataSetChanged();
}
public void clear() {
mList.clear();
}
public void addAll(List<T> entities) {
mList.addAll(entities);
notifyDataSetChanged();
}
public void refresh(List<T> entities) {
mList.clear();
mList.addAll(entities);
notifyDataSetChanged();
}
public interface SpinnerEntity {
View createEntityView(int position, ViewGroup parent);
}
public interface onItemSelectedListener<T extends SpinnerEntity> {
void onItemSelected(T entity, int position);
}
public class OnSpinnerEntitySelectedListener implements AdapterView.OnItemSelectedListener {
onItemSelectedListener<T> listener;
protected OnSpinnerEntitySelectedListener(EasySpinnerAdapter.onItemSelectedListener<T> onItemSelectedListener) {
this.listener = onItemSelectedListener;
}
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
listener.onItemSelected(mList.get(position), position);
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
}
}