gpt4 book ai didi

java - 重构——结合PolygonClickListener和MarkerClickListener

转载 作者:行者123 更新时间:2023-12-02 02:56:23 29 4
gpt4 key购买 nike

我试图通过删除 map.setOnPolygonClickListenermap.setOnMarkerClickListener 中的重复项来重构以下方法。

两个监听器执行完全相同的操作,我想将它们合并为一个,但由于调用来自不同的对象(MarkerPolygon),我不是确定如何组合它们。

public class NavigationFragment extends Fragment implements OnMapReadyCallback,
OnCameraIdleListener, Subject, SearchView.OnQueryTextListener, SearchView.OnCloseListener
{

/**
* add markers and polygons overlay for each building
*/

private void addBuildingMarkersAndPolygons() {
List<Building> allBuildings = new ArrayList<>();
allBuildings.addAll(Campus.SGW.getBuildings());
allBuildings.addAll(Campus.LOY.getBuildings());

for (Building building : allBuildings) {
createBuildingMarkersAndPolygonOverlay(building);
}

map.setOnPolygonClickListener(new GoogleMap.OnPolygonClickListener() {
@Override
public void onPolygonClick(Polygon polygon) {
setBottomSheetContent(polygon);
setupOriginAndDestinationForOutdoorDirection(polygon);
}
});

map.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
@Override
public boolean onMarkerClick(Marker marker) {
setBottomSheetContent(marker);
setupOriginAndDestinationForOutdoorDirection(marker);
return true;
}
});
}
}

最佳答案

我本来想把它写成评论,但太长了。可能是我没有正确理解这个问题,标记和多边形没有共同的父级。我想,如果你创建一个嵌套类,即

private class PolygonAndMarkerClickListener implements GoogleMap.OnPolygonClickListener, GoogleMap.OnMarkerClickListener{

@Override
public boolean onMarkerClick(Marker marker) {
//your code
return false;
}

@Override
public void onPolygonClick(Polygon polygon) {
//your code
}
}

然后

PolygonAndMarkerClickListener polygonAndMarkerClickListener = new PolygonAndMarkerClickListener();
map.setOnPolygonClickListener(polygonAndMarkerClickListener);
map.setOnMarkerClickListener(polygonAndMarkerClickListener);

这会减少一些开销,而且看起来也不错。

如果您想创建一个方法,以便可以从两个监听器调用,那么您必须使用“instanceOf”,许多高级开发人员认为应该避免使用“instanceOf”。我想泛型在这里不会有太大帮助。

关于java - 重构——结合PolygonClickListener和MarkerClickListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43018679/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com