Сейчас я пытаюсь создать приложение для Android, где критическая функция - это возможность щелкнуть по области и установить там флаг.
Чтобы научить себя, как API работы Google Maps, я использовал учебник в руководстве Dev: http://developer.android.com/resources/tutorials/views/hello-mapview.htmlGoogle Maps Tutorial: что такое контекст?
На каждом этапе пути, я пытался понять, что именно происходит. И по большей части, я понял. Единственное, что я не понимаю, это ссылки на Контекст. В частности, в классе HelloItemizedOverlay в этом учебнике, есть линия
Context mContext;
и позже есть два конструктора, один из которых принимает объект контекста в качестве аргумента, а другой, который не делает.
public HelloItemizedOverlay(Drawable defaultMarker){
super(boundCenterBottom(defaultMarker));
}
public HelloItemizedOverlay(Drawable defaultMarker, Context context){
super(boundCenterBottom(defaultMarker));
mContext = 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.
В (только и) основной деятельности для этого урока, следующие строки кажутся те, которые взаимодействуют с классом HelloItemizedOverlay:
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, созданных в целом?
Что происходит с двумя конструкторами?
Спасибо!
http://stackoverflow.com/questions/3572463/what-is-context-in-android – aromero
Я читал это раньше, но я не понимал, как и почему он используется в этом контексте. Похоже, что это должен быть больше, чем ответ в этом вопросе, потому что мне кажется, что текущее состояние приложения действительно не вступает в игру. –
Вы посмотрели http://developer.android.com/reference/android/content/Context.html? – user634618