Google Maps API onInfoWindow点击所有标记的getTitle,而不只是一个

时间:2014-12-09 08:14:40

标签: android json google-maps

我成功地让“Keating Hall”开启了一项新活动,但是我的位置列表(标记通过外部JSON文件和名称填充到字符串中)。

我想把它变成所有我的位置InfoWindows被发送到我的OptionsActivity,而不是“Keating Hall”独有。

以下是一些处理带有硬编码值的OnInfoWindowClickListener的代码:

private void setUpMapIfNeeded() {
    if (map == null) {
        map = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map))
                .getMap();
        if (map != null) {
            setUpMap();

            // allows info windows to be clicked on and open OptionsActivity
            map.setOnInfoWindowClickListener(new OnInfoWindowClickListener(){
                @Override
                public void onInfoWindowClick(Marker marker){
                    if(marker.getTitle().equals("Keating Hall")){ // TODO replace Keating Hall       with last marker clicked title
                        Intent info = new Intent(getApplicationContext(), OptionsActivity.class);
                        startActivity(info);
                    }
                }
            });
        }
    }
}

这是处理JSON数组的void函数,其中包含每个位置的标题:

void createMarkersFromJson(String json) throws JSONException {
    // De-serialize the JSON string into an array of city objects
    JSONArray jsonArray = new JSONArray(json);
    for (int i = 0; i < jsonArray.length(); i++) {
        // Create a marker for each city in the JSON data.
        JSONObject jsonObj = jsonArray.getJSONObject(i);
        map.addMarker(new MarkerOptions()
                        .title(jsonObj.getString("name"))
                        .snippet(Integer.toString(jsonObj.getInt("check ins")))
                        .position(new LatLng(
                                jsonObj.getJSONArray("latlng").getDouble(0),
                                jsonObj.getJSONArray("latlng").getDouble(1)
                        ))

        );
    }
}

为了对所有好的东西的热爱,我无法弄清楚要取代“Keating Hall”的内容,以便我的所有InfoWindows都被发送给Intent来启动活动 - &gt; OptionsActivity,而不仅仅是其中之一。

我在这里看了很多例子,但由于我使用的是JSON,我无法复制允许我的应用程序工作所需的更改。

先谢谢你的帮助。

3 个答案:

答案 0 :(得分:0)

我猜您的逻辑存在问题。您要么不调用setUpMapIfNeeded(),要么onInfoWindowClick()中的条件不满足。调试代码并检查所有条件。

答案 1 :(得分:0)

试试这个..

  

还将您的活动实现为

implements OnClickListener, GoogleMap.OnMarkerClickListener

GoogleMap.OnInfoWindowClickListener

//之后...将其设置为创建以下给定代码

map.setOnInfoWindowClickListener(this); 

//之后使用此代码获取所有标记的onInfoWindowClick getTitle,而不只是一个

@Override
        public void onInfoWindowClick(Marker marker)
        {
    // and used  String m = marker.getId(); or  marker.getTitle() or marker.getSnipet
        }

答案 2 :(得分:0)

我自己解决了这个问题,这很容易。

setUpMapIfNeeded()中,以下内容将为所有onInfoWindowClick打开一个新活动,但如果您想将其硬编码到某些InfoWindow,您可以取消注释我拥有的标题。如果(marker.isVisible()将其设置为为所有InfoWindows打开新活动。

private void setUpMapIfNeeded() {
    if (map == null) {
        map = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map))
                .getMap();
        if (map != null) {
            setUpMap();

            // allows info windows to be clicked on and open OptionsActivity
            map.setOnInfoWindowClickListener(new OnInfoWindowClickListener(){
                @Override
                public void onInfoWindowClick(Marker marker){
                    if(marker.isVisible()
                            //|| marker.getTitle().equals("title a")
                            //|| marker.getTitle().equals("title b")
                            //|| marker.getTitle().equals("title c")
                            ){ 
                        Intent info = new Intent(getApplicationContext(), OptionsActivity.class);
                        startActivity(info);
                    }
                }
            });
        }
    }
}