我有以下代码:
public class AlertViewOnMap extends Activity {
//declarations
ArrayList<String> dateCreatedAtList = new ArrayList<String>();
TextView busNumberTextView;
TextView descriptionTextView;
TextView alertTimeTextView;
DateFormat dateFormat = new SimpleDateFormat("HH:mm");
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
this.setContentView(com.fourbox.bocterapp.R.layout.details_design);
busNumberTextView = (TextView) findViewById(R.id.textViewAlertBusNumber);
descriptionTextView = (TextView) findViewById(R.id.textViewAlertDescription);
alertTimeTextView = (TextView) findViewById(R.id.textViewAlertTime);
busNumber = getIntent().getIntExtra("busNumber", 0);
description = getIntent().getStringExtra("description");
coordinatesLatitude = getIntent().getDoubleExtra("coordinatesLatitude", 0);
coordinatesLongitude = getIntent().getDoubleExtra("coordinatesLongitude", 0);
alertTime.setTime(getIntent().getLongExtra("createdAt", 0));
busNumberList = getIntent().getStringArrayListExtra("busNumberList");
descriptionList = getIntent().getStringArrayListExtra("descriptionList");
coordinatesLatitudeList = getIntent().getStringArrayListExtra("coordinatesLatitudeList");
coordinatesLongitudeList = getIntent().getStringArrayListExtra("coordinatesLongitudeList");
dateCreatedAtList = getIntent().getStringArrayListExtra("dateCreatedAtList");
GoogleMap mMap;
mMap = ((MapFragment) getFragmentManager().findFragmentById(com.fourbox.bocterapp.R.id.mapFragment)).getMap();
reuniteAlertListFromGetExtra();
placeAllMarkersOnMap(mMap, alertsList);
LatLng latLng = new LatLng(coordinatesLatitude, coordinatesLongitude);
CameraPosition cameraPosition = new CameraPosition.Builder()
.target(latLng) // Center Set
.zoom(18.0f) // Zoom
.bearing(0) // Orientation of the camera to east
.tilt(30) // Tilt of the camera to 30 degrees
.build(); // Creates a CameraPosition from the builder
mMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));
busNumberTextView.setText(String.valueOf(busNumber));
descriptionTextView.setText(description);
alertTimeTextView.setText(String.valueOf(dateFormat.format(alertTime)));
}
public void placeAllMarkersOnMap(GoogleMap mMap, ArrayList<Alert> alertsList) {
for(int i =0; i<alertsList.size(); i++) {
mMap.addMarker(new MarkerOptions()
.position(new LatLng(alertsList.get(i).getCoordinates().getLatitude(), alertsList.get(i).getCoordinates().getLongitude()))
.title(alertsList.get(i).getDescription())
.snippet(String.valueOf(alertsList.get(i).getBusNumber())
));
}
}
public void reuniteAlertListFromGetExtra() {
for (int i =0; i<busNumberList.size(); i++) {
Alert alert = new Alert();
ParseGeoPoint parseGeoPoint = new ParseGeoPoint();
parseGeoPoint.setLatitude(Double.valueOf(coordinatesLatitudeList.get(i)));
parseGeoPoint.setLongitude(Double.valueOf(coordinatesLongitudeList.get(i)));
alert.setBusNumber(Integer.valueOf(busNumberList.get(i)));
alert.setDescription(descriptionList.get(i));
alert.setCoordinates(parseGeoPoint);
alert.setCreatedAt(new Date(Long.valueOf(dateCreatedAtList.get(i))));
alertsList.add(alert);
}
}
public GoogleMap.OnMarkerClickListener getInfoMarkerClickListener() {
return new GoogleMap.OnMarkerClickListener() {
@Override
public boolean onMarkerClick(Marker marker) {
busNumberTextView.setText(marker.getSnippet());
descriptionTextView.setText(marker.getTitle());
alertTimeTextView.setText(dateCreatedAtList.get(marker.getId()));
marker.showInfoWindow();
return true;
}
};
}
}
我的问题是:我想添加要存储在我的标记中的自定义数据,这样当我点击它时,&#34; alerTimeTextView&#34;将得到标记创建小时,来自&#34; dateCreatedAtList&#34;?
答案 0 :(得分:5)
请尝试这种方式,希望,这有助于您解决问题。
定义一个 HashMap ,其中标记为关键,提示为值,当您创建新标记以便在地图上添加时添加此< strong>标记作为HashMap中的关键字以及来自 alertsList 的相应警报数据,从 HashMap获取特定的警告数据点击特定标记信息窗口时。
public class AlertViewOnMap extends Activity {
//declarations
ArrayList<String> dateCreatedAtList = new ArrayList<String>();
TextView busNumberTextView;
TextView descriptionTextView;
TextView alertTimeTextView;
DateFormat dateFormat = new SimpleDateFormat("HH:mm");
private HashMap<Marker,Alert> markerDataMap;
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
this.setContentView(com.fourbox.bocterapp.R.layout.details_design);
busNumberTextView = (TextView) findViewById(R.id.textViewAlertBusNumber);
descriptionTextView = (TextView) findViewById(R.id.textViewAlertDescription);
alertTimeTextView = (TextView) findViewById(R.id.textViewAlertTime);
busNumber = getIntent().getIntExtra("busNumber", 0);
description = getIntent().getStringExtra("description");
coordinatesLatitude = getIntent().getDoubleExtra("coordinatesLatitude", 0);
coordinatesLongitude = getIntent().getDoubleExtra("coordinatesLongitude", 0);
alertTime.setTime(getIntent().getLongExtra("createdAt", 0));
busNumberList = getIntent().getStringArrayListExtra("busNumberList");
descriptionList = getIntent().getStringArrayListExtra("descriptionList");
coordinatesLatitudeList = getIntent().getStringArrayListExtra("coordinatesLatitudeList");
coordinatesLongitudeList = getIntent().getStringArrayListExtra("coordinatesLongitudeList");
dateCreatedAtList = getIntent().getStringArrayListExtra("dateCreatedAtList");
GoogleMap mMap;
mMap = ((MapFragment) getFragmentManager().findFragmentById(com.fourbox.bocterapp.R.id.mapFragment)).getMap();
reuniteAlertListFromGetExtra();
placeAllMarkersOnMap(mMap, alertsList);
LatLng latLng = new LatLng(coordinatesLatitude, coordinatesLongitude);
CameraPosition cameraPosition = new CameraPosition.Builder()
.target(latLng) // Center Set
.zoom(18.0f) // Zoom
.bearing(0) // Orientation of the camera to east
.tilt(30) // Tilt of the camera to 30 degrees
.build(); // Creates a CameraPosition from the builder
mMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));
busNumberTextView.setText(String.valueOf(busNumber));
descriptionTextView.setText(description);
alertTimeTextView.setText(String.valueOf(dateFormat.format(alertTime)));
}
public void placeAllMarkersOnMap(GoogleMap mMap, ArrayList<Alert> alertsList) {
markerDataMap = new HashMap<Marker, Alert>();
for(int i=0; i<alertsList.size(); i++) {
markerDataMap.put(mMap.addMarker(new MarkerOptions()
.position(new LatLng(alertsList.get(i).getCoordinates().getLatitude(), alertsList.get(i).getCoordinates().getLongitude()))
.title(alertsList.get(i).getDescription())
.snippet(String.valueOf(alertsList.get(i).getBusNumber())
)),alertsList.get(i));
}
}
public void reuniteAlertListFromGetExtra() {
for (int i =0; i<busNumberList.size(); i++) {
Alert alert = new Alert();
ParseGeoPoint parseGeoPoint = new ParseGeoPoint();
parseGeoPoint.setLatitude(Double.valueOf(coordinatesLatitudeList.get(i)));
parseGeoPoint.setLongitude(Double.valueOf(coordinatesLongitudeList.get(i)));
alert.setBusNumber(Integer.valueOf(busNumberList.get(i)));
alert.setDescription(descriptionList.get(i));
alert.setCoordinates(parseGeoPoint);
alert.setCreatedAt(new Date(Long.valueOf(dateCreatedAtList.get(i))));
alertsList.add(alert);
}
}
public GoogleMap.OnMarkerClickListener getInfoMarkerClickListener() {
return new GoogleMap.OnMarkerClickListener() {
@Override
public boolean onMarkerClick(Marker marker) {
Alert alert = markerDataMap.get(marker);
busNumberTextView.setText(alert.getDescription());
descriptionTextView.setText(alert.getBusNumber());
alertTimeTextView.setText(dateCreatedAtList.get(alert.getId()));
marker.showInfoWindow();
return true;
}
};
}
}
答案 1 :(得分:1)
要回答您的问题:Marker似乎不允许像here
那样的任何“设置”方法,例如View的标记我认为Haresh的解决方案通常是正确的。
我只是对以下方法进行以下更正:
public GoogleMap.OnMarkerClickListener getInfoMarkerClickListener()
该行:
alertTimeTextView.setText(dateCreatedAtList.get(alert.getId()));
应该是:
alertTimeTextView.setText(alert.getCreatedAt());