我尝试使用Rx2Animations Library,但它在样本中使用了Lambda变量。所以,我不太清楚如何在常规代码中扩展lambda。
示例:
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() {
}
}
内部订阅方法出现lambda。
谢谢
答案 0 :(得分:1)
第一个lambda是onNext()
处理程序,this::onAnimationEnd()
是执行onAnimationEnd
方法的方法引用,这里有编译错误,因为onNext会发出一些对象,所以该方法应该有匹配的param :
private void onAnimationEnd(EmittedObject o)
(在此示例代码中EmittedObject
,但它应该是Observable
发出的实际对象类型。
第二个lambda参数是onError()
通知处理程序,它也是方法引用,这次是Throwable.printStackTrace()
方法。
一般来说,IDE(Android Studio)是你最好的朋友,你可以让它根据你选择的签名自动生成你的代码。
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();
}
});