package gueei.binding.viewAttributes.adapterView;
import gueei.binding.Binder;
import gueei.binding.BindingLog;
import gueei.binding.BindingType;
import gueei.binding.IObservable;
import gueei.binding.Observer;
import gueei.binding.ViewAttribute;
import gueei.binding.collections.ExpandableCollectionAdapter;
import gueei.binding.viewAttributes.templates.Layout;
import java.util.Collection;
import android.widget.Adapter;
import android.widget.ExpandableListView;
/**
* Item Source of Expandable List Views
*
* @name itemSource
* @widget ExpandableListView
* @type Object
* @accepts Object
* @category expandable-list
* @related
*
* @author andy
*/
public class ExpandableListView_ItemSourceViewAttribute
extends ViewAttribute<ExpandableListView, Object> {
Layout template, childItemTemplate;
String childItemSource;
private Observer attrObserver = new Observer(){
public void onPropertyChanged(IObservable<?> prop,
Collection<Object> initiators) {
createAdapter();
}
};
public ExpandableListView_ItemSourceViewAttribute
(ExpandableListView view) {
super(Object.class,view, "itemSource");
try{
ViewAttribute<?,?> attrItemTemplate = Binder.getAttributeForView(getView(), "itemTemplate");
ViewAttribute<?,?> attrChildItemTemplate = Binder.getAttributeForView(getView(), "childItemTemplate");
ViewAttribute<?,?> attrChildItemSource = Binder.getAttributeForView(getView(), "childItemSource");
attrItemTemplate.subscribe(attrObserver);
attrChildItemTemplate.subscribe(attrObserver);
attrChildItemSource.subscribe(attrObserver);
}catch(Exception e){
BindingLog.exception("ExpandableListView_ItemSourceViewAttribute", e);
}
createAdapter();
}
private void getAttributeValue() throws Exception {
template = ((Layout)Binder.getAttributeForView(getView(), "itemTemplate").get());
childItemTemplate = ((Layout)Binder.getAttributeForView(getView(), "childItemTemplate").get());
childItemSource = (String)(Binder.getAttributeForView(getView(), "childItemSource").get());
}
private Object mValue;
@Override
protected void doSetAttributeValue(Object newValue) {
mValue = newValue;
if(getView()==null) return;
createAdapter();
}
private void createAdapter(){
if (mValue==null) return;
try {
getAttributeValue();
if ((template==null) || (childItemTemplate==null) || (childItemSource==null))
return;
Adapter groupAdapter =
gueei.binding.collections.Utility.getSimpleAdapter
(getView().getContext(), mValue, template, template, null);
ExpandableCollectionAdapter adapter = new ExpandableCollectionAdapter
(getView().getContext(), groupAdapter, childItemSource, childItemTemplate);
getView().setAdapter(adapter);
} catch (Exception e) {
e.printStackTrace();
return;
}
}
@Override
public Object get() {
// Set only attribute
return null;
}
@Override
protected BindingType AcceptThisTypeAs(Class<?> type) {
return BindingType.OneWay;
}
}