如何在kotlin android中使用具有两个或多个回调方法的类的lambda表达式

问题描述 投票:0回答:2

让我们在java中创建一个onClickListener()的场景

view.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
    Toast.makeText(v.getContext(), "Click", Toast.LENGTH_SHORT).show();
}});

我们可以在kotlin中使用lambda表达式来简化它

 view.setOnClickListener({ view -> toast("Click")})

如果我们有一个类或接口有两个或更多的回调,如下所示: -

Service.MakeApiCall(new OnCallListener() {
  @Override
  public void onSuccess(View v) {
    //some code
  }

  @Override
  public void onError(String x){
    //some code
  }
});

如何在这种情况下使用Lambda表达式,如OnClickListener示例

android lambda kotlin callback
2个回答
1
投票

Lambdas只能用于功能接口。请改用对象

val listener = object : OnCallListener() {
        override fun onSuccess(v: View) {
            //some code
        }

        override fun onError(x: String){
            //some code
        }
    }

0
投票

这不可能。 Lambda表达式只是一种方法。

有一个解决方法。你可以创建自己的扩展函数,它需要两个lambdas:

fun Service.MakeApiCall(success: (View) -> Unit, 
                        error: (String) -> Unit) {
     MakeApiCall(object: OnCallListener {
        override fun onSuccess(v: View) {
            success(v)
        }

        override fun onError(x: String) {
            error(x)
        }
    })
}

您尝试模仿的API看起来与Observer模式类似。可能,Kotlin Coroutines将帮助https://kotlinlang.org/docs/reference/coroutines-overview.html

© www.soinside.com 2019 - 2024. All rights reserved.