作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图通过删除 map.setOnPolygonClickListener
和 map.setOnMarkerClickListener
中的重复项来重构以下方法。
两个监听器执行完全相同的操作,我想将它们合并为一个,但由于调用来自不同的对象(Marker
或 Polygon
),我不是确定如何组合它们。
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/
TL;DR - 如果您尝试在相同的标记上应用 MarkerClickListener 两次,会发生什么情况?第一个取消了吗?他们都活跃吗?这会导致问题吗? 我们有一个项目使用 Google Maps
我是一名优秀的程序员,十分优秀!