2011-11-17 152 views
0

我跟着谷歌的地图视图教程从这个链接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对话框=新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显示错误在该线无法实例叠加: 叠加itemizedoverlay =新重叠(绘制);

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

+0

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

回答

2

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

您的第二个错误发生是因为Overlay是一个Abstract类。你不能用“new”实例化一个抽象类。你想在这里做的是实例化你的Overlay子类。在您的导入语句中,您正在导入com.google.android.maps.Overlay,因此它认为您正在实例化该实例,而不是您的子类。要解决,有

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

更换

Overlay itemizedoverlay = new Overlay (drawable); 

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

+0

非常感谢:)我总是忽视这个名字可能是第二个错误的问题。 – stevyhacker