实现RoutePreviewNavigationTemplate时出现参数异常问题求助
异常原因
RoutePreviewNavigationTemplate要求列表内的每一行(Row)必须在标题或文本中直接附加DistanceSpan或DurationSpan对象。你当前的代码是将Span对象直接拼接到字符串中,这会导致Span被转成普通字符串(如DistanceSpan@xxxx),系统无法识别出有效的距离/时长Span,从而抛出参数异常。
解决方案
需要使用CarText.Builder来构建包含Span的文本,而非直接字符串拼接。具体修改如下:
修改后的完整代码
class RoutePreviewScreen(carContext: CarContext) : Screen(carContext) { @SuppressLint("UnsafeOptInUsageError") override fun onGetTemplate(): Template { val builder = RoutePreviewNavigationTemplate.Builder() .setTitle("Route Details") .setHeaderAction(Action.APP_ICON) val currentLocation = CarLocation.create(19.269160, -103.754996) val locationA = CarLocation.create(19.2689369, -103.7636865) val markerA = PlaceMarker.Builder().setColor(CarColor.RED).build() val placeA = Place.Builder(locationA).setMarker(markerA).build() val distancia = 5 val duracion = 20 val distanceSpan = DistanceSpan.create(Distance.create(distancia.toDouble(), Distance.UNIT_KILOMETERS)) val durationSpan = DurationSpan.create(duracion.toLong()) // 正确构建包含DistanceSpan的文本 val distanceText = CarText.Builder() .addText("Distance: ") .addSpan(distanceSpan) .build() // 正确构建包含DurationSpan的文本 val durationText = CarText.Builder() .addText("Duration: ") .addSpan(durationSpan) .build() val routeItem = Row.Builder() .setTitle(CarText.create("From current to A")) .addText(distanceText) .addText(durationText) .setMetadata( Metadata.Builder() .setPlace(placeA) .build() ) .build() val itemList = ItemList.Builder() .addItem(routeItem) .build() builder.setItemList(itemList) val navigateAction = Action.Builder() .setTitle("Iniciar Navegación") .setOnClickListener { //TODO IMPLEMENT NAVIGATION } .build() builder.setNavigateAction(navigateAction) return builder.build() } }
关键说明
- 使用
CarText.Builder的addSpan方法,能将DistanceSpan/DurationSpan正确附加到文本中,让系统识别并验证这些Span的存在,满足RoutePreviewNavigationTemplate的规则。 - 若列表中有多个行,每一行都需要至少包含距离或时长Span中的一种。
内容的提问来源于stack exchange,提问作者Juan Vazquez
相关产品推荐
相关产品推荐

