【问题标题】:Kotlin, set value to TextView use callback interfaceKotlin,为TextView设置值使用回调接口
【发布时间】:2018-03-27 21:20:09
【问题描述】:

这样的小例子,在 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 上设置这样的地名?

【问题讨论】:

    标签: kotlin kotlin-android-extensions kotlin-extension


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢你的回答和链接,兄弟!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多