Я делаю проект с Google Maps для Android. Я создал MapActivity для загрузки некоторых мест, которые я сохранил на сервере. Итак, у меня есть этот класс
public class PlaceItemizedOverlay extends ItemizedOverlay<OverlayItem> {
private ArrayList<OverlayItem> mOverlays = new ArrayList<OverlayItem>();
Context mContext = null;
MapActivity mapAct = null;
public PlaceItemizedOverlay(Drawable defaultMarker, MapActivity map) {
super(boundCenterBottom(defaultMarker));
this.macAct = map;
}
public PlaceItemizedOverlay(Drawable defaultMarker, Context context) {
super(boundCenterBottom(defaultMarker));
mContext = context;
}
@Override
protected OverlayItem createItem(int i) {
return mOverlays.get(i);
}
public void addOverlay(OverlayItem overlay) {
mOverlays.add(overlay);
populate();
}
@Override
public int size() {
return mOverlays.size();
}
@Override
protected boolean onTap(int index) {
OverlayItem item = mOverlays.get(index);
AlertDialog.Builder dialog = new AlertDialog.Builder(mContext);
dialog.setTitle(item.getTitle());
dialog.setMessage(item.getSnippet());
dialog.show();
this.mapAct.finish();
return true;
}
Ну, когда я нажимаю на сохраненное место, программа прерывается.
Я создаю объект на mapActivity:
PlaceItemzedOverlay itemizedoverlay = new PlaceItemizedOverlay(drawable, this);
Не могли бы вы мне помочь?
Большое спасибо!
проблема здесь//часть вашего кода
@Override
protected boolean onTap(int index) {
OverlayItem item = mOverlays.get(index);
AlertDialog.Builder dialog = new AlertDialog.Builder(mContext);
dialog.setTitle(item.getTitle());
dialog.setMessage(item.getSnippet());
dialog.show();//here you show a alert dialog on current activity
//this.mapAct.finish();//and here you finish current activity
return true;
}
при этой ситуации приложение вылетает.. и использует
finish();
для тебя
this.mapAct.finish();
Если, как вы говорите, вы создаете объект itemizedoverlay
используя...
PlaceItemzedOverlay itemizedoverlay = new PlaceItemizedOverlay(drawable, this);
... тогда следующая строка недействительна...
AlertDialog.Builder dialog = new AlertDialog.Builder(mContext);
В основном у вас есть два участника для PlaceItemzedOverlay
. Второй параметр одного - это Context
а другой - MapActivity
. Это только два места, где либо mContext
либо mapAct
установлены на действительную ссылку, и оба они являются взаимоисключающими. Другими словами, какой бы ни был конструктор, тот или другой из mContext
или mapAct
останется null
.
Смешивание использования mContext
и mapAct
в методе onTap
никогда не будет работать...
AlertDialog.Builder dialog = new AlertDialog.Builder(mContext);
...
this.mapAct.finish();