我尝试为我的地图活动添加一种“预览”。在此活动中应显示标记的名称和后来的地址(在json中设置)。不幸的是,我没有为所选标记获得正确的内容。我只是得到其中一个项目的内容。这是我的代码:
f = int(input("Enter numbers to add products"))
n = open("testfile.txt","r")
print(f + int(n.read()))
}
答案 0 :(得分:0)
你在循环中调用setOnMarkerClickListener
。因为这是整个地图的setter,所以每次都会覆盖监听器。因此,我希望您始终能够看到最后联系人的信息。相反,您应该只将此方法称为一次。在for循环中不。
现在,您已经注意到您无法访问您的联系人对象。您必须使用传递给点击事件的标记来选择正确的联系人。您已将标记的标题设置为联系人的姓名,因此您应该可以将其从标记中拉出来并使用它来找到正确的联系人。
类似的东西:
mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
@Override
public boolean onMarkerClick(Marker marker) {
String name = marker.getTitle();
HashMap<String, String> currContact = contactList.stream().filter(c -> c.get("name").equals(name)).findFirst().get();
LinearLayout prev = (LinearLayout) findViewById(R.id.preview);
prev.setVisibility(View.VISIBLE);
TextView nameprev = (TextView) findViewById(R.id.namepre);
nameprev.setText(currContact.get("name"));
Toast.makeText(getApplicationContext(),currContact.get("name"),Toast.LENGTH_LONG).show();
return false;
}
});
如果在Marker标记中保存对整个联系人的引用,可能会更简单。
Marker marker = mMap.addMarker(new MarkerOptions().position(P1).title(contact.get("name")));
marker.setTag(contact);
然后,如果您能够将整个对象拉出而不仅仅是名称:
HashMap<String, String> currContact = (HashMap<>) marker.getTag();
答案 1 :(得分:0)
将mMap.setOnMarkerClickListener()
和mMap.setOnMapClickListener()
添加到onCreate()
方法:
@Override
protected void onCreate( Bundle savedInstanceState) {
................
.........................
mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
@Override
public boolean onMarkerClick(Marker marker) {
LinearLayout prev = (LinearLayout) findViewById(R.id.preview);
prev.setVisibility(View.VISIBLE);
TextView nameprev = (TextView) findViewById(R.id.namepre);
nameprev.setText(contact.get("name"));
Toast.makeText(getApplicationContext(),contact.get("name"),Toast.LENGTH_LONG).show();
return false;
}
});
mMap.setOnMapClickListener(new GoogleMap.OnMapClickListener() {
@Override
public void onMapClick(LatLng latLng) {
LinearLayout prev = (LinearLayout) findViewById(R.id.preview);
prev.setVisibility(View.INVISIBLE);
TextView nameprev = (TextView) findViewById(R.id.namepre);
nameprev.setText("Clubname");
}
});
}
更新onPostExecute()
,如下所示:
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
for (final HashMap<String, String> contact: contactList) {
LatLng P1 = new LatLng(Double.parseDouble(contact.get("lat")),
Double.parseDouble(contact.get("lng")));
mMap.addMarker(new MarkerOptions().position(P1).title(contact.get("name")));
}
}