Сейчас я пытаюсь создать приложение для Android, в котором критической особенностью является возможность щелкнуть мышью по области и установить там флаг.
Чтобы научиться работать с API Карт Google, я использовал учебник вРуководство разработчика: http://developer.android.com/resources/tutorials/views/hello-mapview.html
На каждом этапе пути я пытался точно понять, что происходит.И по большей части, я получил это.Единственное, что я не понимаю, это ссылки на контекст.В частности, в классе HelloItemizedOverlay в этом учебном пособии есть строка
Context mContext;
, а позже есть два конструктора, один из которых принимает объект Context в качестве аргумента, а другой - нет.
public HelloItemizedOverlay(Drawable defaultMarker){
super(boundCenterBottom(defaultMarker));
}
public HelloItemizedOverlay(Drawable defaultMarker, Context context){
super(boundCenterBottom(defaultMarker));
mContext = context;
}
Элемент Context, по-видимому, вступает в игру позже в этом классе в методе onTap:
@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();
return true;
}
Однако в руководстве не объясняется, как работает AlertDialog.Builder.- это как бы выбрасывает это.И кажется, что понимание цели этого имеет решающее значение для понимания того, почему существует объект Context.
В основном (и единственном) упражнении для этого урока следующие строки, по-видимому, взаимодействуют с HelloItemizedOverlayclass:
List<Overlay> mapOverlays = mapView.getOverlays();
Drawable drawable = this.getResources().getDrawable(R.drawable.androidmarker);
**HelloItemizedOverlay itemizedoverlay = new HelloItemizedOverlay(drawable);**
GeoPoint point = new GeoPoint(19240000, -99120000);
OverlayItem overlayitem = new OverlayItem(point, "Hello World!", "Ciudad Mexico");
itemizedoverlay.addOverlay(overlayitem);
mapOverlays.add(itemizedoverlay);
Строка, помеченная **, является строкой, которая ссылается на конструктор для класса HelloItemizedOverlay.Однако эта строка вызвала ошибку NullPointerException в методе onTap, что имеет смысл, поскольку этот метод использует mContext, которому никогда не присваивается значение.После поиска в StackOverflow я обнаружил, что это ошибка в учебнике, и что ее можно исправить, изменив строку на
**HelloItemizedOverlay itemizedoverlay = new HelloItemizedOverlay(drawable, this);**
, что, действительно, сработало.
Так что мойвопросы:
Что такое контекст?Я не смог найти четкого и подходящего ответа в Интернете.
Почему и как используется Контекст в этом учебном пособии и в общих настройках Карт Google?
Что такоес двумя конструкторами?
Спасибо!