java - 谷歌地图教程 : What is Context?

标签 java android google-maps android-mapview

现在我正在尝试设计一个 Android 应用程序,其中一个关键功能是能够点击一个区域并在那里设置一个标志。
为了自学 Google Maps API 的工作原理,我使用了开发指南中的教程: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 对象存在的原因至关重要。

在本教程的主要(也是唯一) Activity 中,以下行似乎是与 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 类的构造函数的行。然而,该行结果在 onTap 方法中产生了一个 NullPointerException 错误,这是有道理的,因为该方法使用了 mContext,它从未被赋予一个值。通过 StackOverflow 搜索后,我发现这是教程中的错误,可以通过将行更改为

来修复
**HelloItemizedOverlay itemizedoverlay = new HelloItemizedOverlay(drawable, this);**

这确实有效。

所以我的问题是:

什么是语境?我真的无法在互联网上找到明确且适用的答案。

为什么以及如何在本教程和一般设置的 Google map 中使用 Context?

这两个构造函数是怎么回事?

谢谢!

最佳答案

What is Context?

ContextActivity(和其他类)的祖先类。它提供对资源等事物的访问。您经常需要为各种方法和构造函数提供 Context。如果您在组件中(例如 MapActivity),在大多数情况下使用 this 就足够了。

Why and how is Context used in this tutorial and in the Google Maps set up in general?

您的 MapActivity 继承自 Context

关于java - 谷歌地图教程 : What is Context?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8684073/

相关文章:

java - 如何使用 Java 创建基本的人类可读的 XHTML 纯文本表示?

Java - 密码字段字符计数器

Java 8 - 就地映射数组/集合

android - Espresso 不匹配具有许多字符的矢量绘图 - ImageDrawable(AppCompatResource)

android - 在 fragment 内初始化 map

java - 如何使用 Hibernate eqOrIsNull()

java - 如何将参数从 asynctask 解析为方法?

Android - 无法从 4.2.2 上的相机 Intent 获取图像

android - 带有太多标记的谷歌地图

Android:如何覆盖 Google map 上的指南针操作