私はlambdaの概念を探求しており、機能的なインタフェースを実装しながら、より単純な構文を提供する方法についても検討してきました。AndroidのDrawerLayout.DrawerListenerをラムダ式で使用するにはどうすればいいですか?
this articleによれば、1つの方法がある場合、ラムダを実装するのは非常に簡単です。私は、例えば、同様の引数の種類が異なるメソッドを持つインタフェースに対して、この作品を見てきました
etDate.setOnClickListener(view -> Timber.i("the date is xyz"));
:
public interface Observer<T> {
void onSubscribe(Disposable d);
void onNext(T t);
void onError(Throwable e);
void onComplete();
}
ができるよう、
interface OnClickListener {
public void onClick(View v);
}
は次のように使用することができます
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();
});
私はonNextの後にonErrorを使うことができました。
しかしthe DrawerListener interfaceを見てみましょう:
私はこの使用してRetroLambdaを使用することはできませんよ。 IDEはコードをラムダに変更するよう提案しておらず、そのように使用することもできません。私はこれのように書く必要があります...
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) {
}
});
...きちんとしていません。私はそれを書くような解決策を望んでいます:
drawer.addDrawerListener(view, offset -> {
// My action goes here
});
クールを
その後、あなたは次のように引き出しリスナーを追加記述することができます。私はこの回避策は、私は新しいインターフェイスを作成する必要があると考えて生産性ではないと思う。目標はコードを減らさずに増加させることでした。これをクリアしてくれてありがとう。 –