package gueei.binding.collections; import gueei.binding.Binder; import gueei.binding.IObservable; import gueei.binding.Observable; import gueei.binding.Observer; import gueei.binding.viewAttributes.templates.Layout; import gueei.binding.viewAttributes.templates.SingleTemplateLayout; import java.util.Collection; import android.content.Context; import android.database.DataSetObserver; import android.view.View; import android.view.ViewGroup; import android.widget.Adapter; import android.widget.ListAdapter; import android.widget.SpinnerAdapter; /** * Singleton Adapter is a adapter contains one and only one object * @author andy */ public class SingletonAdapter implements Adapter, SpinnerAdapter, Observer, ListAdapter { private final Object mObj; private final Context mContext; private View mView, mDropDownView; private DataSetObserver mDataSetObserver; private final Layout mTemplate, mDropDownTemplate; public SingletonAdapter(Context context, Object obj, Layout template, Layout dropDownTemplate){ mObj = obj; mContext = context; mTemplate = template; mDropDownTemplate = dropDownTemplate; if(obj instanceof Observable){ ((Observable<?>) obj).subscribe(this); } } public SingletonAdapter(Context context, Object obj, int layoutId, int dropDownLayoutId){ this(context, obj, new SingleTemplateLayout(layoutId), new SingleTemplateLayout(dropDownLayoutId)); } public int getCount() { return 1; } public Object getItem(int position) { return mObj; } public long getItemId(int position) { return 0; } public int getItemViewType(int position) { return mTemplate.getLayoutTypeId(position); } public View getView(int position, View convertView, ViewGroup parent) { if (mView==null){ mView = Binder.bindView(mContext, Binder.inflateView(mContext, mTemplate.getDefaultLayoutId(), parent, false), mObj); } return mView; } public int getViewTypeCount() { return mTemplate.getTemplateCount(); } public boolean hasStableIds() { return true; } public boolean isEmpty() { return false; } public void registerDataSetObserver(DataSetObserver observer) { mDataSetObserver = observer; } public void unregisterDataSetObserver(DataSetObserver observer) { mDataSetObserver = null; } public View getDropDownView(int position, View convertView, ViewGroup parent) { if (mDropDownView==null){ mDropDownView = Binder.bindView(mContext, Binder.inflateView(mContext, mDropDownTemplate.getDefaultLayoutId(), parent, false), mObj); } return mDropDownView; } public void onPropertyChanged(IObservable<?> prop, Collection<Object> initiators) { if (mDataSetObserver!=null) mDataSetObserver.notify(); } // This is supposed to be separator, so it is disabled @Override public boolean areAllItemsEnabled() { return false; } @Override public boolean isEnabled(int position) { return false; } }