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); 不能让list添加相同的数据
时间: 2024-02-25 22:51:48 浏览: 53
您好!针对您的问题,可以使用以下方法来避免向列表中添加相同的数据:
在添加数据之前,可以通过循环遍历列表中的元素来判断当前要添加的数据是否已经存在于列表中。如果已经存在,则不再添加该数据;如果不存在,则将该数据添加到列表中。
具体代码实现如下:
```
BNRoutePlanNode build = new BNRoutePlanNode.Builder()
.latitude(poiInfo.getLocation().latitude)
.longitude(poiInfo.getLocation().longitude)
.name(poiInfo.name)
.description(poiInfo.name)
.build();
if (!list.contains(build)) {
list.add(build);
}
BaiduNaviManagerFactory.getRouteGuideManager().addViaNodes(list);
```
以上代码会先创建一个 BNRoutePlanNode 对象,然后通过判断列表中是否已经包含该对象来决定是否将其添加到列表中。
希望以上回答能够解决您的问题,如有不清楚的地方,欢迎继续提问。
相关问题
private final List<BNRoutePlanNode> list = new ArrayList<>(); @Override protected void addWaypoint(PoiInfo poiInfo) { 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); //设置最大途径点的个数(支持4~18个) BaiduNaviManagerFactory.getCommonSettingManager().setViaPointCount(4); } 以上代码中,添加第二个途经点的时候,显示添加了三个,怎么解决?不能清空list,因为我还需要拿到list中添加途经点的数据
如果不能清空`list`,你可以在每次调用`addWaypoint`方法时,先检查`list`中是否已经存在该途经点,如果已经存在则不重复添加。可以使用`contains`方法来判断途经点是否已经存在于`list`中,例如:
```
private final List<BNRoutePlanNode> list = new ArrayList<>();
@Override
protected void addWaypoint(PoiInfo poiInfo) {
BNRoutePlanNode build = new BNRoutePlanNode.Builder()
.latitude(poiInfo.getLocation().latitude)
.longitude(poiInfo.getLocation().longitude)
.name(poiInfo.name)
.description(poiInfo.name)
.build();
if (!list.contains(build)) {
list.add(build);
}
BaiduNaviManagerFactory.getRouteGuideManager().addViaNodes(list);
//设置最大途径点的个数(支持4~18个)
BaiduNaviManagerFactory.getCommonSettingManager().setViaPointCount(4);
}
```
这样可以避免重复添加途经点,同时也能保留`list`中的数据,让你可以在后续的逻辑中继续使用。
protected List<BNRoutePlanNode> list = new ArrayList<>(); @Override protected void addWaypoint(PoiInfo poiInfo) { BNRoutePlanNode build = new BNRoutePlanNode.Builder() .latitude(poiInfo.getLocation().latitude) .longitude(poiInfo.getLocation().longitude) .name(poiInfo.name) .description(poiInfo.name) .build(); if (!list.contains(build)) { list.add(build); } BaiduNaviManagerFactory.getRouteGuideManager().addViaNodes(list); //设置最大途径点的个数(支持4~18个) BaiduNaviManagerFactory.getCommonSettingManager().setViaPointCount(4); mAllPoi.clear(); setSessionOver(true); } 以上代码是安卓百度导航添加途经点功能的代码,但是有个问题,第二次执行添加途经点addViaNodes(list)后, 地图上只显示了途经点1和途经点3,没有途经点2。因为void addViaNodes(List<BNRoutePlanNode> var1)方法每次都添加一个list,添加第二次的话list有两条数据,它还会算上第一次添加的list数据,从而导致途径点变成1和3,没有途经点2 我设置的是可以添加四条途经点信息,从list中可以知道这四条途经点的信息数据。有没有好的方法可以帮我解决我添加途径带你只显示1和3的问题?
可以尝试在每次调用 `addWaypoint` 方法前,先清空 `list` 集合,然后重新添加所有途经点信息。这样就不会出现重复添加的问题了。修改后的代码如下:
```
protected List<BNRoutePlanNode> list = new ArrayList<>();
@Override
protected void addWaypoint(PoiInfo poiInfo) {
list.clear(); // 先清空集合
for (int i = 0; i < mAllPoi.size(); i++) {
if (mAllPoi.get(i).isSelected()) {
BNRoutePlanNode build = new BNRoutePlanNode.Builder()
.latitude(mAllPoi.get(i).getLocation().latitude)
.longitude(mAllPoi.get(i).getLocation().longitude)
.name(mAllPoi.get(i).getName())
.description(mAllPoi.get(i).getName())
.build();
list.add(build);
}
}
BaiduNaviManagerFactory.getRouteGuideManager().addViaNodes(list);
// 设置最大途经点的个数(支持4~18个)
BaiduNaviManagerFactory.getCommonSettingManager().setViaPointCount(4);
mAllPoi.clear();
setSessionOver(true);
}
```
这样每次添加途径点时,都会重新遍历 `mAllPoi` 集合并重新添加所有的途径点信息,不会出现漏掉某个途径点的情况。
阅读全文