当前位置: 首页 > 知识库问答 >
问题:

从不调用映射事件

於英朗
2023-03-14

我试图在用户轻击或长按时在映射中的某个地方放一个标记,我在singletapconfirmedhelper方法中放一个toast并登录longpreshelper以了解发生了什么,我注意到这些方法从未被调用,我做错了什么?我正在使用最新的osmdroid和osmbonuspack版本,并且运行良好,下面是我的代码:

public class MapActivity3 extends AppCompatActivity implements MapEventsReceiver {
MapView map;
TextView tv;
ArrayList<OverlayItem> overlayItemArray;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_map3);

    tv=(TextView)findViewById(R.id.textView);

    map = (MapView) findViewById(R.id.map);
    map.setTileSource(TileSourceFactory.MAPNIK);

    map.setBuiltInZoomControls(true);
    map.setMultiTouchControls(true);

    IMapController mapController = map.getController();
    mapController.setZoom(14);
    GeoPoint startPoint = new GeoPoint(19.7059504, -101.19498249999998);
    mapController.setCenter(startPoint);

    Toast.makeText(MapActivity3.this, "Long press to add a marker", Toast.LENGTH_LONG).show();

    overlayItemArray = new ArrayList<>();

}

@Override
public boolean singleTapConfirmedHelper(GeoPoint geoPoint) {
    Toast.makeText(this, "Tapped", Toast.LENGTH_SHORT).show();
    return true;
}

@Override
public boolean longPressHelper(GeoPoint geoPoint) {
    Log.e("LongPress", "Inside");

    overlayItemArray.add(new OverlayItem("", "", geoPoint));
    ItemizedIconOverlay<OverlayItem> itemizedIconOverlay = new ItemizedIconOverlay<>(this, overlayItemArray, null);

    map.getOverlays().add(itemizedIconOverlay);

    Geocoder geocoder = new Geocoder(getApplicationContext(), Locale.getDefault());
    String result;
    try {
        List<Address> addressList = geocoder.getFromLocation(
                geoPoint.getLatitude(), geoPoint.getLongitude(), 1);
        if (addressList != null && addressList.size() > 0) {
            Log.e("LongPress","1st if");
            Address address = addressList.get(0);
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < address.getMaxAddressLineIndex(); i++) {
                sb.append(address.getAddressLine(i)).append("\n");
            }
            sb.append(address.getLocality()).append("\n");
            sb.append(address.getCountryName());
            result = sb.toString();
                tv.setText(result);
        }
    } catch (IOException e) {
        Log.e("LngPrss, Geocoder", "Unable connect to Geocoder", e);
    }

    return true;

} }

共有1个答案

武友樵
2023-03-14

你要做的就是认真地按照教程去做。

您错过了关于MapEventsOverlay的第1步。

 类似资料:
  • 所以,每次vuex中的状态不为null时,我都试图更新组件中的一些数据。我用laravel设置了一个API路由,在用户登录后返回用户信息。 API路线: Vuex: 所以在我的应用程序中。vue,在created方法中,如果令牌存在,我将使用http响应作为有效负载提交SET_AUTH_USER。 应用程序。vue: 到目前为止,一切正常。每次我刷新页面,只要我的本地存储中有一个令牌,用户对象将永

  • 我有一些代码需要帮助...我正在尝试使用两个地图作为源并同时使用java lambdas构建地图 我可以用你们在上面看到的foreach做到这一点,但我试图用lambdas做到这一点。。。像这样的 我想要的输出是这样的 但我无法理解

  • 有一个SQL数据库包含此过程 t_字段类型的定义如下: 我正在使用JDBC调用该过程,我知道我需要一个连接和一个callStmt,但我不确定如何处理t_字段参数映射。有什么建议吗?

  • 还在学习Java8。我的代码看起来像: 上述代码不起作用,因为peek()无法访问主流变量,即map()中使用的电子邮件。我该如何解决这个问题?

  • 我在解决泛型问题时遇到了一些麻烦。我有一个“猫”对象列表和一个“狗”对象列表,我需要将它们传递到同一个方法中。该方法的返回类型是一个“字符串”和“动物列表”的映射,我试图找出一种方法来将带有动物列表的映射转换为带有猫或狗列表的映射。 这工作很好,如果我有一个单独的方法猫和狗,但我正在寻找一个更灵活的解决方案。 标题中出现错误的行: 注意:这是一个简化的例子,我必须能够使用地图中的列表作为“猫”或“