BaiduNaviManagerFactory.getRouteGuideManager().deleteViaNodes(); BaiduNaviManagerFactory.getRouteGuideManager().addViaNodes(list); BaiduNaviManagerFactory.getCommonSettingManager().setViaPointCount(4); 删除和添加不能同时进行,要先删除再添加,帮我写一下代码
时间: 2024-02-28 10:52:25 浏览: 26
以下是将删除和添加操作分别放在两个方法中的代码:
```java
// 删除所有途经点
private void deleteAllViaPoints() {
BaiduNaviManagerFactory.getRouteGuideManager().deleteViaNodes();
BaiduNaviManagerFactory.getCommonSettingManager().setViaPointCount(0);
}
// 设置途经点列表
private void setViaPoints(List<BNRoutePlanNode> viaPoints) {
// 先删除所有途经点
deleteAllViaPoints();
// 添加新的途经点
if (viaPoints != null && !viaPoints.isEmpty()) {
BaiduNaviManagerFactory.getRouteGuideManager().addViaNodes(viaPoints);
BaiduNaviManagerFactory.getCommonSettingManager().setViaPointCount(viaPoints.size());
}
}
```
在调用 `setViaPoints` 方法时,可以将需要设置的途经点列表作为参数传入。
相关问题
boolean removed = routeList.removeIf(node -> node.get(0).getName().contains(keyWord)); if (removed) { BaiduNaviInitHelper.setCanSpeak(false); BaiduNaviManagerFactory.getRouteGuideManager().deleteViaNodes(); List<BNRoutePlanNode> list = new ArrayList<>(); for (List<BNRoutePlanNode> planNodeList : routeList) { //planNodeList获取0是因为list中只有一条数据 list.add(planNodeList.get(0)); } android.util.Log.d("TAGAA", "deleteWayPoint: sdhwaio 核对哇哈 " + list); BaiduNaviManagerFactory.getRouteGuideManager().addViaNodes(list); BaiduNaviManagerFactory.getCommonSettingManager().setViaPointCount(4); showFullView(); isWayPoint = false; } else { speakWithoutFollowStep("抱歉,当前没有" + keyWord + "途经点"); } 这个删除和添加是同时执行的吗?先删除再添加,帮我改一下代码
可以使用以下代码实现先删除再添加的功能:
```
boolean removed = routeList.removeIf(node -> node.get(0).getName().contains(keyWord));
if (removed) {
List<BNRoutePlanNode> list = new ArrayList<>();
for (List<BNRoutePlanNode> planNodeList : routeList) {
list.add(planNodeList.get(0));
}
BaiduNaviManagerFactory.getRouteGuideManager().setViaNodes(list);
BaiduNaviManagerFactory.getCommonSettingManager().setViaPointCount(4);
BaiduNaviInitHelper.setCanSpeak(false);
BaiduNaviManagerFactory.getRouteGuideManager().deleteViaNodes();
BaiduNaviManagerFactory.getRouteGuideManager().addViaNodes(list);
showFullView();
isWayPoint = false;
} else {
speakWithoutFollowStep("抱歉,当前没有" + keyWord + "途经点");
}
```
在这段代码中,首先执行了删除操作,然后将剩余的途经点用一个列表保存起来。接着,使用 `setViaNodes()` 方法将剩余的途经点重新添加到导航 SDK 中,同时设置途经点的数量为 4。最后,关闭语音播报、删除所有途经点、重新添加途经点、显示全览图,并设置 `isWayPoint` 为 false。
protected List<List<BNRoutePlanNode>> routeList = new ArrayList<>(); @Override protected void addWaypoint(PoiInfo poiInfo) { List<BNRoutePlanNode> list = new ArrayList<>(); BNRoutePlanNode build = new BNRoutePlanNode.Builder() .latitude(poiInfo.getLocation().latitude) .longitude(poiInfo.getLocation().longitude) .name(poiInfo.name) .description(poiInfo.name) .build(); list.add(build); BaiduNaviManagerFactory.getRouteGuideManager().addViaNodes(list); routeList.add(list); //设置最大途径点的个数(支持4~18个) BaiduNaviManagerFactory.getCommonSettingManager().setViaPointCount(4); mAllPoi.clear(); setSessionOver(true); } 以上代码是添加途径点, public void deleteWayPoint(String keyWord) { if (keyWord != null) { routeList.removeIf(node -> node.get(0).getName().equals(keyWord)); android.util.Log.d("TAGAA", "deleteWayPoint: 删除的数据 "+keyWord +" "+routeList.toString()); List<BNRoutePlanNode> list = new ArrayList<>(); for (List<BNRoutePlanNode> ed : routeList) { list.add(ed.get(0)); } BaiduNaviManagerFactory.getRouteGuideManager().deleteViaNodes(); BaiduNaviManagerFactory.getRouteGuideManager().addViaNodes(list); BaiduNaviManagerFactory.getCommonSettingManager().setViaPointCount(4); android.util.Log.d("TAGAA", "deleteWayPoint: 数据是 " + list.toString()); } else { BaiduNaviManagerFactory.getRouteGuideManager().deleteViaNodes(); } }这个是删除途经点,比如说,现在有三个途经点,我删除了含有keyword的途经点,再清除所有的途经点,我删除后,list数据里面还有两条数据,那么再次添加就没有反应了,这是为什么?Debug和打印log都显示有数据,但是在地图上面没有显示添加途径点,请帮我写一下代码解决一下
根据您提供的代码,我发现您在删除途经点后,只是将剩余途经点的信息重新添加到了导航管理中,但是没有更新到地图上。
您可以尝试在删除途经点后,调用导航管理类的`setEndPoint`方法,将最后一个途经点的信息设置为终点,然后再调用`setViaNodeIndex`方法,将途经点的索引设置为0,即重新设置第一个途经点。
具体代码如下:
```
public void deleteWayPoint(String keyWord) {
if (keyWord != null) {
routeList.removeIf(node -> node.get(0).getName().equals(keyWord));
android.util.Log.d("TAGAA", "deleteWayPoint: 删除的数据 "+keyWord +" "+routeList.toString());
List<BNRoutePlanNode> list = new ArrayList<>();
for (List<BNRoutePlanNode> ed : routeList) {
list.add(ed.get(0));
}
BaiduNaviManagerFactory.getRouteGuideManager().deleteViaNodes();
BaiduNaviManagerFactory.getRouteGuideManager().addViaNodes(list);
BaiduNaviManagerFactory.getCommonSettingManager().setViaPointCount(4);
android.util.Log.d("TAGAA", "deleteWayPoint: 数据是 " + list.toString());
// 将最后一个途经点作为终点
BNRoutePlanNode endNode = list.get(list.size() - 1);
BaiduNaviManagerFactory.getRoutePlanManager().setEndPoint(endNode);
// 将第一个途经点作为当前途经点
BaiduNaviManagerFactory.getRoutePlanManager().setViaNodeIndex(0);
} else {
BaiduNaviManagerFactory.getRouteGuideManager().deleteViaNodes();
}
}
```
希望能够解决您的问题。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![list](https://img-home.csdnimg.cn/images/20210720083646.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)