Compartiendo RxBindings Eventos observables entre múltiples suscriptores

Estoy usando un Focus Observable de la biblioteca de RxBindings para reaccionar en los cambios de enfoque. Como quiero validar la entrada y activar una animación necesito los eventos de enfoque dos veces. Jake Wharton recomienda utilizar el operador share () para múltiples suscripciones en una observable. Pero si manipulo el observable después de usar share () la primera suscripción está muerta.

Este es un pequeño ejemplo de mi usecase

public class ShareTest extends AppCompatActivity { @Bind(R.id.editTextOne) EditText editTextOne; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_share_test); ButterKnife.bind(this); Observable<Boolean> focusChangeObservable = RxView.focusChanges(editTextOne); focusChangeObservable.subscribe(focused -> Log.d("test","Subscriber One: "+focused)); focusChangeObservable.share().skip(1).filter(focused -> focused == false).subscribe(focused -> { Log.d("test","Subscriber Two: "+focused); }); } } 

Lo que necesitaba y esperaba era una salida cuando ganaba y perdía el foco en el EditText

 Focus gain Subscriber One: true Focus loss Subscriber One: false Subscriber Two: false 

Pero lo que realmente obtengo es

 Focus gain Focus loss Subscriber Two: false 

Así parece que la manipulación del segundo caso anula la primera. ¿Qué estoy haciendo mal y cuál es la forma prevista para compartir eventos entre múltiples suscriptores cuando se manipulan de manera diferente

Gracias

RxView.focusChanges () Observable establece nuevo OnFocusChangeListener en Ver cada vez que se suscribe a él, por lo que el oyente anterior no recibirá ninguna nueva llamada.

En tu código tienes dos suscripciones – primero directamente en focusChangeObservable y la segunda es share operator

Convertir su observable en un ConnectableObservable a través de operador de compartir es una buena idea, aunque es necesario suscribirse a Observable devuelto por compartir cada vez fe:

  final Observable<Boolean> sharedFocusChangeObservable = focusChangeObservable.share(); sharedFocusChangeObservable.subscribe(focused -> Log.d("test","Subscriber One: "+focused)); sharedFocusChangeObservable.skip(1).filter(focused -> focused == false).subscribe(focused -> { Log.d("test","Subscriber Two: "+focused); }); 
  • ¿Cómo recuperar cuerpo de respuesta con RxAndroid y Retrofit 2?
  • Android rxJava Manejo de errores con retroadaptación
  • Cómo manejar el error auth0 403 sin agregar código específico en todas partes (Retrofit / okhttp / RxAndroid)
  • RxJava: Se produjo un error al intentar propagar el error a Observer.onError
  • ¿Cómo crear un observable de Hashmap?
  • Acceso al dominio desde un subproceso incorrecto Excepción mientras se envió una copia usando copyFromRealm
  • RxJava solo planificador de hilos de fondo
  • Obtención perezosa de objetos paginados usando RxJava
  • .debounce () de RxJava interfiriendo con los hilos de mis observables y manejo de errores
  • Rxjava Android cómo utilizar el operador Zip
  • Cómo anular los Observables compartidos, infinitos con un retraso después de que el último suscriptor no se haya suscrito
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.