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)})
这样的小例子,在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)})