Android Rxjava subscribe to a variable change

前端 未结 3 933
故里飘歌
故里飘歌 2020-12-14 06:09

I am learning Observer pattern, I want my observable to keep track of a certain variable when it changes it\'s value and do some operations, I\'ve done something like :

相关标签:
3条回答
  • 2020-12-14 07:02

    Nothing is magic in the life : if you update a value, your Observable won't be notified. You have to do it by yourself. For example using a PublishSubject.

    public class Test extends MyChildActivity {
    
        private int VARIABLE_TO_OBSERVE = 0;
    
        Subject<Integer> mObservable = PublishSubject.create();  
    
       protected void onCreate() {/*onCreate method*/
            super();
            setContentView();
            method();
            changeVariable();
        }
    
        public void changeVariable() {
            VARIABLE_TO_OBSERVE = 1;
            // notify the Observable that the value just change
            mObservable.onNext(VARIABLE_TO_OBSERVE);
        }
    
       public void method() {
           mObservable.map(value -> {
               if (value == 1) doMethod2();
               return String.valueOf(value);
           }).subScribe(string -> System.out.println(string));
       }
    
       public void doMethod2() {/*Do additional operations*/}
    
     }
    
    0 讨论(0)
  • 2020-12-14 07:09

    If interested here a Kotlin version of Variable class, which lets subscribers to be updated after every variable change.

    class Variable<T>(private val defaultValue: T) {
    var value: T = defaultValue
        set(value) {
            field = value
            observable.onNext(value)
        }
    val observable = BehaviorSubject.createDefault(value)
    }
    

    Usage:

    val greeting = Variable("Hello!")
    greeting.observable.subscribe { Log.i("RxKotlin", it) }
    greeting.value = "Ciao!"
    greeting.value = "Hola!"
    

    This will print:

    "Hello!"
    "Ciao!"
    "Hola!"
    
    0 讨论(0)
  • 2020-12-14 07:12

    @dwursteisen Nothing is magic, no, but I think we can get it a little more magic than that...

    0 讨论(0)
提交回复
热议问题