Я занимаюсь разработкой приложения, которое использует OSMdroid. Основное внимание уделяется нажатию на кнопку, новый маркер будет добавлен к текущему местоположению, в котором пользователь добавляет имя, тип, цену, широту и долготу. Проблема в том, что когда я меняю местоположение, ранее добавленный маркер меняет свои значения и показывает только широту и долготу при нажатии. И когда я пытаюсь добавить новый маркер, он добавляет эти значения в первый созданный маркер.
Это мой код. Спасибо
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
Configuration.getInstance().load(this, PreferenceManager.getDefaultSharedPreferences(this));
setContentView(R.layout.addplace);
final EditText name = (EditText) findViewById(R.id.nameTXT);
final EditText type = (EditText) findViewById(R.id.typeTXT);
final EditText price = (EditText) findViewById(R.id.priceTXT);
addplace = (Button) findViewById(R.id.btnAddPlace);
map = findViewById(R.id.map1);
map.setMultiTouchControls(true);
map.getController().setZoom(16.0);
markerGestureListener = new ItemizedIconOverlay.OnItemGestureListener<OverlayItem>() {
public boolean onItemLongPress(int i, OverlayItem item) {
Toast.makeText(AddNewPlace.this, item.getSnippet(), Toast.LENGTH_SHORT).show();
return true;
}
public boolean onItemSingleTapUp(int i, OverlayItem item) {
Toast.makeText(AddNewPlace.this, item.getSnippet(), Toast.LENGTH_SHORT).show();
return true;
}
};
LocationManager mgr = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
try{
location = mgr.getLastKnownLocation(LocationManager.GPS_PROVIDER);
if (location!=null){
latitude = location.getLatitude();
longitude = location.getLongitude();
}}catch(SecurityException e){
e.printStackTrace();
}
map.getController().setCenter(new GeoPoint(latitude, longitude));
items = new ItemizedIconOverlay<OverlayItem>(this, new ArrayList<OverlayItem>(), markerGestureListener);
OverlayItem newPlace = new OverlayItem("Current Location", "Latitude:" + latitude + " Longitude: " +
longitude, new GeoPoint(latitude, longitude));
newPlace.setMarker(getResources().getDrawable(R.drawable.marker_default));
items.addItem(newPlace);
map.getOverlays().add(items);
try {
mgr.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 15, this);
} catch (SecurityException e) {
e.printStackTrace();
}
addplace.setOnClickListener(new View.OnClickListener() {
public void onClick (View v) {
String namePTS = name.getText().toString();
String typePTS = type.getText().toString();
String pricePTS = price.getText().toString();
if (namePTS.isEmpty() && typePTS.isEmpty() && pricePTS.isEmpty()) {
Toast.makeText(AddNewPlace.this, "Fields are empty", Toast.LENGTH_SHORT).show();
} else if (namePTS.isEmpty()) {
Toast.makeText(AddNewPlace.this, "Name is empty", Toast.LENGTH_SHORT).show();
} else if (typePTS.isEmpty()) {
Toast.makeText(AddNewPlace.this, "Type is empty", Toast.LENGTH_SHORT).show();
} else if (pricePTS.isEmpty()) {
Toast.makeText(AddNewPlace.this, "Price is empty", Toast.LENGTH_SHORT).show();
} else {
markerGestureListener = new ItemizedIconOverlay.OnItemGestureListener<OverlayItem>() {
public boolean onItemLongPress(int i, OverlayItem item) {
Toast.makeText(AddNewPlace.this, item.getSnippet(), Toast.LENGTH_SHORT).show();
return true;
}
public boolean onItemSingleTapUp(int i, OverlayItem item) {
Toast.makeText(AddNewPlace.this, item.getSnippet(), Toast.LENGTH_SHORT).show();
return true;
}
};
items = new ItemizedIconOverlay<OverlayItem>(AddNewPlace.this, new ArrayList<OverlayItem>(), markerGestureListener);
final OverlayItem newPOI = new OverlayItem("Place of interest", "Name= " + namePTS + " Type= " + typePTS +
" Price= " + pricePTS + " Latitude= " +location.getLatitude() + " Longitude= " + location.getLongitude(),
new GeoPoint(location.getLatitude(), location.getLongitude()));
newPOI.setMarker(getResources().getDrawable(R.drawable.marker_default));
items.addItem(newPOI);
map.getOverlays().add(items);
Toast.makeText(AddNewPlace.this, "New place added with success", Toast.LENGTH_SHORT).show();
try{
File file = new File(Environment.getExternalStorageDirectory(), "placestostay.txt");
BufferedWriter writer = new BufferedWriter(new FileWriter(file,true));
file.createNewFile();
writer.write(namePTS);
writer.write(", ");
writer.write(typePTS);
writer.write(", ");
writer.write(pricePTS);
writer.write(", ");
writer.write(Double.toString(location.getLatitude()));
writer.write(", ");
writer.write(Double.toString(location.getLongitude()));
writer.newLine();
writer.flush();
writer.close();
}
catch (IOException e) {
e.printStackTrace();
}
}
}
}
);
}
public void onLocationChanged(Location newLoc) {
double lat = newLoc.getLatitude();
double lon = newLoc.getLongitude();
map.getController().setCenter(new GeoPoint(newLoc.getLatitude(), newLoc.getLongitude()));
OverlayItem currentLocation = new OverlayItem("Current Location", "Current location", new GeoPoint(lat, lon));
currentLocation.setMarker(getResources().getDrawable(R.drawable.marker_default));
items.removeAllItems();
items.addItem( currentLocation);
map.getOverlays().add(items);
Toast.makeText(this, "Latitude=" +
newLoc.getLatitude() + " Longitude=" +
newLoc.getLongitude(), Toast.LENGTH_LONG).show();
}