Kotlin,将值设置为TextView使用回调接口

Kotlin, set value to TextView use callback interface

这样的小例子,在Java我有:

 public static void getPlaceName(GoogleApiClient mGoogleApiClient, String placeId, @NonNull PlaceNameCallback callback) {
        Places.GeoDataApi.getPlaceById(mGoogleApiClient, placeId)
                .setResultCallback(places -> {
                    if (places.getStatus().isSuccess() && places.getCount() > 0) {
                        Place myPlace = places.get(0);
                        callback.onPlaceDetected(String.valueOf(myPlace.getName())); // set place name
                    }
                    places.release();
                });
    }

    public interface PlaceNameCallback {
        void onPlaceDetected(String name);
    }

然后我可以将地名设置为 TextView:

    getPlaceName(mGoogleApiClient, arrivalId[0], name -> textArrival.setText(name));

请告诉我如何在 Kotlin 上设置这样的地名?

这个东西叫做 SAM(单一抽象方法),它是关于 Java 世界的。在当前版本的 Kotlin 中,如果您的接口是在 Kotlin 中声明的,则您不能像那样使用 SAM。为此,他们使用高阶函数而不是接口。 但是,据我所知,在 Kotlin 的 1.3 版本中,我们可能会遇到这种可能性(此信息取自对 JetBrains 的一位 Kotlin 开发人员的采访,如果您熟悉俄语,您可以看到这个 post 这里:https://habrahabr.ru/company/redmadrobot/blog/351516/)

顺便说一句,您可以在 Kotin 中使用 SAM,但前提是您的接口是在 Java 中声明的。对于您的示例,它应该如下所示:

getPlaceName(mGoogleApiClient, arrivalId[0], PlaceNameCallback { textArrival.setText(it)})