【问题标题】:Google Map View tutorial - Overlays谷歌地图视图教程 - 叠加
【发布时间】:2011-11-18 02:11:42
【问题描述】:

我从这个链接http://developer.android.com/resources/tutorials/views/hello-mapview.html关注了谷歌的地图视图教程
我已经完成了关于创建地图活动的第一个,但是在添加叠加层时遇到了问题。以下是源代码:

package rs.iz.stevy.wifi;

import java.util.ArrayList;

import android.graphics.drawable.Drawable;
import android.app.AlertDialog;
import android.content.Context;
import com.google.android.maps.ItemizedOverlay;
import com.google.android.maps.OverlayItem;

public class Overlay extends ItemizedOverlay {

    public Overlay(Drawable defaultMarker, Context context) {
          super(defaultMarker);
          Context mContext;
          mContext = context;
        }

    private ArrayList<OverlayItem>mOverlays= new ArrayList<OverlayItem>();

    public Overlay(Drawable defaultMarker) {
        super(boundCenterBottom(defaultMarker));
    }
    public void addOverlay(OverlayItem overlay) {
        mOverlays.add(overlay);
        populate();
    }

    @Override
    protected OverlayItem createItem(int i) {
        return mOverlays.get(i); }

    @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();
      return true;
    }

}

错误出现在这一行: AlertDialog.Builder 对话框 = new AlertDialog.Builder(mContext); Eclipse 显示 mContext 无法解析为变量。

这是 Activity 类:

rs.iz.stevy.wifi;

import java.util.List;

import com.google.android.maps.GeoPoint;
import com.google.android.maps.ItemizedOverlay;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapView;
import com.google.android.maps.Overlay;

import android.graphics.drawable.Drawable;
import android.os.Bundle;


public class WiFiKupacicaActivity extends MapActivity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        MapView mapa= (MapView) findViewById(R.id.Mapa1);
        mapa.setBuiltInZoomControls(true);
        mapa.setSatellite(true);

       GeoPoint initGeoPoint = mapa.getMapCenter();

    List<Overlay> mapOverlays = mapa.getOverlays();
    Drawable drawable = this.getResources().getDrawable(R.drawable.kupacica);
    Overlay itemizedoverlay = new Overlay (drawable);

    }

    @Override
    protected boolean isRouteDisplayed() {
        // TODO Auto-generated method stub
        return false;
    }

Eclipse 显示错误无法在此行实例化 Overlay: Overlay itemizedoverlay = new Overlay (drawable);

如果您在这里看到任何可以轻松修复的错误,请回答,因为这是我第一次尝试编写 Android 应用程序。

【问题讨论】:

  • @ 问题在于您用于添加叠加层的类名称,因此首先您需要将类叠加层的名称更改为您喜欢的任何其他东西 MapOverlay 然后将其扩展为 ItemizedOverlay 。

标签: android overlay android-mapview


【解决方案1】:

第一个错误是因为您在构造函数中将 mContext 定义为局部变量而不是实例变量。要进行补救,请将Context mContext; 行移出构造函数(将其放在此行public Overlay(Drawable defaultMarker, Context context) { 之前)。您想在任何方法之外声明实例变量,但在类本身内。

出现第二个错误是因为 Overlay 是一个 Abstract 类。你不能用“new”实例化一个抽象类。您在这里要做的是实例化您的 Overlay 子类。在您的导入语句中,您正在导入com.google.android.maps.Overlay,因此它认为您正在实例化它而不是您的子类。要修复,请替换

Overlay itemizedoverlay = new Overlay (drawable);

rs.iz.stevy.wifi.Overlay itemizedoverlay = new rs.iz.stevy.wifi.Overlay (drawable);

在实践中,您应该避免给一个类指定一个已经在其自己的层次结构中的抽象类的名称(以避免这样的导入错误)。

【讨论】:

  • 非常感谢 :) 我完全忽略了该名称可能是第二个错误的问题。
猜你喜欢
  • 1970-01-01
  • 2010-09-15
  • 1970-01-01
  • 2012-08-01
  • 1970-01-01
  • 2012-09-12
  • 1970-01-01
  • 2021-12-11
  • 1970-01-01
相关资源
最近更新 更多