package org.robobinding.widget.adapterview;
import org.robobinding.property.DataSetPropertyChangeListener;
import org.robobinding.property.DataSetValueModel;
import org.robobinding.property.DataSetValueModelWrapper;
import org.robobinding.property.PropertyChangeListener;
import org.robobinding.property.PropertyChangeListenerAdapters;
/**
* @since 1.0
* @author Cheng Wei
*
*/
public class LazyDataSetValueModel extends DataSetValueModelWrapper {
private SizeState sizeState;
public LazyDataSetValueModel(final DataSetValueModel delegate) {
super(delegate);
sizeState = ZERO;
final SizeState sizeOfValueModel = new SizeState() {
@Override
public int size() {
return delegate.size();
}
};
DataSetPropertyChangeListener listener = PropertyChangeListenerAdapters.adapt(new PropertyChangeListener() {
@Override
public void propertyChanged() {
sizeState = sizeOfValueModel;
}
});
delegate.addPropertyChangeListener(listener);
}
@Override
public int size() {
return sizeState.size();
}
private static interface SizeState {
int size();
}
private SizeState ZERO = new SizeState() {
public int size() {
return 0;
}
};
}