2016-10-17 8 views
0

私は、ユーザがいくらかの金額を入力する編集テイストを持っています。デフォルトで無効にされている継続ボタンがあり、金額が有効である範囲内であれば有効です。私は$ 2000または$ 10,000として金額をフォーマットしようとします。ここでは、編集テキストでWidgetObservableをどのように使用しているかを示します。RxJava + RxAndroid WidgetObservableを使ってテキストを書式設定する方法

Observable<Boolean> amountValidObervable = WidgetObservable.text(amount, false) 
      .debounce(500,TimeUnit.MILLISECONDS) 
      .observeOn(AndroidSchedulers.mainThread()) 
      .map(new Func1<OnTextChangeEvent, Boolean>() { 
       @Override 
       public Boolean call(OnTextChangeEvent event) { 
        CharSequence amount = event.text(); 
        return isValid(amount); 
       } 
      }); 

formChangeSubscription = amountValidObservable.subscribe(new Action1<Boolean>() { 
      @Override 
      public void call(Boolean isValid) { 
       amountLayout.setErrorEnabled(isValid ? false : true); 
       amountLayout.setError(isValid ? null : "Please enter amount within the range"); 
      } 
     }); 

     amountValidObservable.subscribe(new Subscriber<Boolean>() { 
      @Override 
      public void onCompleted() { 
       log.debug("formChangeObservable completed"); 
      } 

      @Override 
      public void onError(Throwable e) { 
       log.debug("formChangeObservable error!"); 
      } 

      @Override 
      public void onNext(Boolean formValid) { 
          nextBtn.setBackgroundResource(R.drawable.btn); 
       nextBtn.setEnabled(formValid); 
      } 
     }); 

は、私は、ユーザーが入力しているようRxJavaで、このフォーマッタを使用してテキストの書式を設定するにはどうすればよい

DecimalFormat decimalFormat = new DecimalFormat("$#,###"); 

のようなものを使用して、エディットテキストのテキストの書式を設定します。いくつかの依存関係のために、私はRxBindingsをまだ使用できません。

答えて

0

Observableに2人の加入者がいるため、refCuntするのが良いでしょう。 amountValidObervableの末尾に.replay(1).refCount()を追加してください。

WidgetObservable.text(amount, false) 
     .debounce(500,TimeUnit.MILLISECONDS) 
     .observeOn(AndroidSchedulers.mainThread()) 
     .map(new Func1<OnTextChangeEvent, Boolean>() { 
      @Override 
      public Boolean call(OnTextChangeEvent event) { 
       CharSequence amount = event.text(); 
       return isValid(amount); 
      } 
     }) 
     .replay(1) 
     .refCount(); 
関連する問題