I can refresh the google map on refresh button click, but it is showing me the old coordinates. And in some areas it shows the rectangle image with a cross image in it. Where is the error or what modification I have to do in it?
This is my code:
public class GmapActivity extends MapActivity {Mapview map;Button btnrefresh;Button btnbacktolist; int chargenumber=0;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.gmapactivity);
final Bundle bundle = this.getIntent().getExtras();
chargenumber = bundle.getInt("ChargeNumber");
int latitude = bundle.getInt("latitude");
int longitude = bundle.getInt("longitute");
CreateMap(latitude, longitude);
btnrefresh = (Button) findViewById(R.id.btnReload);
btnrefresh.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
RefreshMap();
}
});
btnbacktolist = (Button) findViewById(R.id.btnBack);
btnbacktolist.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
BacktoScheduleList(bundle);
}
});
}
protected void BacktoScheduleList(Bundle bundle) {
ProgressDialog progressDialog = ProgressDialog.show(this, "",
"Please wait...", true);
bundle = this.getIntent().getExtras();
Bundle Newbundle = new Bundle();
Newbundle.putString("userid", bundle.getString("userid").trim());
Newbundle.putString("username", bundle.getString("username").trim());
Intent intent = new Intent(this, Ok.class);
intent.putExtras(bundle);
startActivityForResult(intent, 0);
progressDialog.dismiss();
finish();
}
private void CreateMap(int latitude, int longitude) {
map = (MapView) findViewById(R.id.mvView);
map.setBuiltInZoomControls(true);
map.setStreetView(true);
List<Overlay> mapOverlays = map.getOverlays();
Drawable drawable = this.getResources().getDrawable(
R.drawable.school_bus);
MOverlayItems itemizedOverlay = new MOverlayItems(drawable, this);
GeoPoint point = null;
point = new GeoPoint(latitude, longitude);
OverlayItem overlayitem = new OverlayItem(point, null, null);
itemizedOverlay.addOverlay(overlayitem);
mapOverlays.add(itemizedOverlay);
MapController mapController = map.getController();
mapController.animateTo(point);
mapController.setZoom(12);
}
protected void RefreshMap() {
map.getOverlays().clear();
map.clearAnimation();
WebServiceCaller webservicecaller = new WebServiceCaller();
String result = webservicecaller.GetLatLong(chargenumber);
if (result.toString().equalsIgnoreCase("false")) {
} else {
StringTokenizer tokens = new StringTokenizer(result, ",");
int latitude = Integer.parseInt(tokens.nextToken());
int longitude = Integer.parseInt(tokens.nextToken());
ProgressDialog progressDialog = ProgressDialog.show(this, "",
"Refreshing. Please wait...", true);
CreateMap(latitude, longitude);
progressDialog.dismiss();
}
}
protected boolean isRouteDisplayed() {
// TODO Auto-generated method stub
return false;
}
}
I use it the following way and it is working properly for me. Probably you nedd also a map.invalidate()
call.
protected void RefreshMap() {
map.getOverlays().clear();
map.invalidate();
... create itemizedOverlay
map.getOverlays().add(itemizedOverlay);
map.invalidate();
map.getController().animateTo(point);
}