2017-08-26 3 views
1

J'ai cette ImageView qui a cliqué sur devrait afficher Toast et faisant également api sur le clic de l'image Voir, donc j'ai décidé d'utiliser Debounce opérateur en Rx mais maintenant, il n'est pas visible à chaque clic. ci-dessous est le codeRX java/Android comment j'atteins Ce toast à chaque clic en utilisant l'opérateur debounce

cartSubscriptionDecrement = RxView.clicks(holder.databinding 
      .cartQuantityLayout.ivDecreaseQuantity) 
      .debounce(1000, TimeUnit.MILLISECONDS) 
      .subscribe { next -> 
    cartQuantityEvent.onCartQuantityDecremented(cartSubscriptionDecrement!!) 
      } 

Je dois montrer toast sur chaque clic de imageView.

J'ai essayé d'avoir une méthode onclick séparée pour la vue de l'image, mais au cours du débogage j'ai trouvé que le contrôle ne soit jamais à venir à la méthode onclick ceci est mon autre méthode onclick

Comment puis-je obtenir ce toast sur chaque clic sans faire un appel api à chaque clic (utiliser l'opérateur Debounce).

+0

holder.deleteCartIcon !! setOnClickListener { v -> Log.e ("clic", "cliqué") } une autre méthode onclick est au-dessus –

Répondre

0

Vous devez appliquer ".subscribeOn (AndroidSchedulers.mainThread())" à tous les événements RxBinding, tels que "RxView.clicks()"

1

Il y a plusieurs façons de faire ce que vous demandez. J'ai inclus le plus simple ci-dessous, mais devra réfléchir plus sur les effets secondaires potentiels de l'utilisation de doOnNext. Je viens de réaliser que le nom du paquet est faux, mais l'exemple fonctionnera très bien.

Le code le plus pertinent de l'exemple est ci-dessous. La clé est que vous aurez besoin de rebondir après vous montrer le Toast plutôt qu'auparavant.

RxView.clicks(image1) 
      .doOnNext(imageClickedEvent -> { 
       // Show toast every time onNext is called (this will also log to LogCat) 
       showToast(); 
      }) 
      .debounce(1000, TimeUnit.MILLISECONDS) 
      .subscribe(clickEvent -> { 
       makeApiCall(); 
      }); 

J'ai essayé d'avoir une méthode onclick séparée pour la vue de l'image, mais au cours du débogage j'ai trouvé que le contrôle ne soit jamais à venir à la méthode onclick ceci est mon autre méthode onclick

Je crois que c'est le cas parce que RxClicks définit un écouteur sur l'ImageView, et cela se produit après le cadre définit l'écouteur onClick et vous ne pouvez en avoir un OnClickListener sur un View si je me souviens bien. Donc, ce qui se passe est le RxView.clicks(imageView) reçoit l'événement click plutôt que la méthode que vous avez créé séparément. .