我成功地让“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,我无法复制允许我的应用程序工作所需的更改。
先谢谢你的帮助。
答案 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);
}
}
});
}
}
}