Ich habe das Konzept von Lambdas erkundet und wie sie eine einfachere Syntax bei der Implementierung von funktionalen Schnittstellen bieten.Wie verwendet man Android DrawerLayout.DrawerListener in einem Lambda-Ausdruck?
Gemäß this article, wenn es eine Methode gibt, ist es ziemlich einfach, das Lambda zu implementieren. So
interface OnClickListener {
public void onClick(View v);
}
Kann wie verwendet werden:
etDate.setOnClickListener(view -> Timber.i("the date is xyz"));
habe ich diese Arbeit für Schnittstellen mit Methoden gesehen als auch verschiedene Arten von Argumenten, zum Beispiel:
public interface Observer<T> {
void onSubscribe(Disposable d);
void onNext(T t);
void onError(Throwable e);
void onComplete();
}
Kann verwendet werden als
api.getData()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(response -> {
Toast.makeText(this, "Result: " + response.toString(), Toast.LENGTH_LONG).show();
}, error -> {
Toast.makeText(this, "API returned an error: " + error.getLocalizedMessage(), Toast.LENGTH_LONG).show();
});
Also konnte ich onNext gefolgt von onError auf diese Weise verwenden.
Aber nehmen Sie einen Blick auf the DrawerListener interface:
Ich bin nicht in der Lage, dies mit RetroLambda zu verwenden. Die IDE schlägt mir nicht vor, den Code in Lambda zu ändern, und ich kann es auch nicht als solches verwenden. Ich muss es so schreiben ...
drawer.addDrawerListener(new DrawerLayout.DrawerListener() {
@Override
public void onDrawerSlide(View drawerView, float slideOffset) {
// My action goes here
}
@Override
public void onDrawerOpened(View drawerView) {
}
@Override
public void onDrawerClosed(View drawerView) {
}
@Override
public void onDrawerStateChanged(int newState) {
}
});
... was nicht ordentlich ist. Ich hoffe auf eine Lösung wie:
drawer.addDrawerListener(view, offset -> {
// My action goes here
});
kühlen. Ich denke, diese Problemumgehung ist nicht produktiv, wenn man bedenkt, dass ich eine neue Schnittstelle erstellen muss. Das Ziel war, den Code zu reduzieren, nicht zu erhöhen. Vielen Dank für die Klärung. –