2017-05-02 2 views
0

Ich versuche, Rx2Animations Bibliothek zu verwenden, aber es verwendet Lambda-Variablen in ihren Beispielen. Also, ich weiß nicht genau, wie ich diese Lambdas im regulären Code erweitern kann.Was ist der erweiterte Code von dieser Lambda-Methode?

Das Beispiel:

package oxim.digital.rx2animations.colorpicker; 

import java.util.concurrent.TimeUnit; 

import io.reactivex.android.schedulers.AndroidSchedulers; 
import io.reactivex.disposables.Disposable; 

public final class ColorPickerPresenter extends BasePresenter<ColorPickerContract.View> implements ColorPickerContract.Presenter { 

    @Override 
    public void refreshView() { 
     final ColorPickerContract.View view = getNullableView(); 
     if (view == null) { 
      return; 
     } 

     final Disposable animationDisposable = view.setupInitialAnimation() 
       .delay(500, TimeUnit.MILLISECONDS) 
       .observeOn(AndroidSchedulers.mainThread()) 
       .concatWith(view.startInitialAnimation()) 
       .subscribe(this::onAnimationEnd, Throwable::printStackTrace); 

     addSubscription(animationDisposable); 
    } 

    private void onAnimationEnd() { 

    } 

} 

Innerhalb Methode subscribe erscheint das Lambda.

Danke

Antwort

1

die erste Lambda die onNext() Handler ist this::onAnimationEnd() Methode Referenz, die onAnimationEnd Methode ausführen, haben Sie Fehler kompilieren hier als OnNext einige Objekt aussendet, so dass die Methode sollte passende param haben:
private void onAnimationEnd(EmittedObject o)
(in diesem Beispielcode ist es EmittedObject, aber es sollte der tatsächliche Objekttyp sein, den Ihr Observable ausstrahlt).
Der zweite Lambda-Parameter ist der onError() Benachrichtigungs-Handler, der auch Methodenreferenz ist, dieses Mal auf die Throwable.printStackTrace()-Methode.

Generell ist die IDE (Android Studio) Ihr bester Freund ist, können Sie einfach lassen Sie es automatisch Code generieren basierend auf der Signatur, die Sie wählen)

final Disposable animationDisposable = view.setupInitialAnimation() 
      .delay(500, TimeUnit.MILLISECONDS) 
      .observeOn(AndroidSchedulers.mainThread()) 
      .concatWith(view.startInitialAnimation()) 
      .subscribe(new Consumer<EmittedObject>() { 
       @Override 
       public void accept(@NonNull EmittedObject o) throws Exception { 
        onAnimationEnd(o); 
       } 
      }, new Consumer<Throwable>() { 
       @Override 
       public void accept(@NonNull Throwable throwable) throws Exception { 
        throwable.printStackTrace(); 
       } 
      }); 
+0

Danke @yosriz – MAOL