Skip to content

Instantly share code, notes, and snippets.

@thuytrinh
Created January 11, 2015 09:08
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save thuytrinh/1baedc58efdb61983ed8 to your computer and use it in GitHub Desktop.
Save thuytrinh/1baedc58efdb61983ed8 to your computer and use it in GitHub Desktop.
A reactivex-based class to represent a mutable property of an object
import rx.Observable;
import rx.functions.Action1;
import rx.subjects.BehaviorSubject;
public class ObservableProperty<T> implements Action1<T> {
private final BehaviorSubject<T> valueSubject;
private T value;
public ObservableProperty() {
valueSubject = BehaviorSubject.create();
}
public ObservableProperty(T defaultValue) {
this.value = defaultValue;
valueSubject = BehaviorSubject.create(defaultValue);
}
public T getValue() {
return value;
}
public void setValue(T value) {
this.value = value;
valueSubject.onNext(value);
}
public boolean hasValue() {
return value != null;
}
public Observable<T> observe() {
return valueSubject;
}
@Override
public void call(T value) {
setValue(value);
}
}
public class TextItem {
  private final ObservableProperty<String> text = new ObservableProperty<>();
  private final ObservableProperty<String> fontPath = new ObservableProperty<>("fonts/Anton.ttf");

  public ObservableProperty<String> text() {
    return text;
  }

  public ObservableProperty<String> fontPath() {
    return fontPath;
  }
}
    textItem.text().observe().subscribe(new Action1<CharSequence>() {
      @Override
      public void call(CharSequence text) {
        // Update the view.
        setText(text);
      }
    });
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment