使用 onTap() 时,Android 谷歌地图 View 返回错误 - 应该显示 Alertdialog

标签 android google-maps google-maps-markers

我目前已经修改了“Google map View ”代码(见下文),但是本地图加载并且您点击 map 上的项目时,它会返回错误。

我相信它与 mContext 的空值有关,但我不确定,如果有人能帮助我解决这个问题,我将不胜感激:

protected boolean onTap(int index) {
OverlayItem item = mOverlays.get(index);
Context mContext = null;
AlertDialog.Builder dialog = new AlertDialog.Builder(mContext);

我的 map 类:

package testing.map;

import java.util.List;

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

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

public class Mapview extends MapActivity {
    /** Called when the activity is first created. */

protected boolean isRouteDisplayed(){
    return false;
}
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.mapview);

        MapView mapView = (MapView) findViewById(R.id.mapview);
        mapView.setBuiltInZoomControls(true);

        List<Overlay> mapOverlays = mapView.getOverlays();
        Drawable drawable = this.getResources().getDrawable(R.drawable.jd_sports_logo);
        HelloItemizedOverlay itemizedoverlay = new HelloItemizedOverlay(drawable);

        //Declared longitude/latitude as doubles as GeoPoint only uses 'int' - converted to microdegrees
        double latitude = 51.545538;
        double longitude = -0.477247;
        GeoPoint point = new GeoPoint((int)(latitude * 1e6), (int)(longitude * 1e6));

        OverlayItem overlayitem = new OverlayItem(point, "Hola, Mundo!", "I'm in Mexico City!");

        itemizedoverlay.addOverlay(overlayitem);
        mapOverlays.add(itemizedoverlay);
    }

    }

我的 HelloItemizedOverlay 类:

package testing.map;

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 HelloItemizedOverlay extends ItemizedOverlay {

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

    public HelloItemizedOverlay(Drawable defaultMarker) {
        super(boundCenterBottom(defaultMarker));

    }
    public void addOverlay(OverlayItem overlay) {

        mOverlays.add(overlay);
        populate();
    }
    public HelloItemizedOverlay(Drawable defaultMarker, Context context) {
          super(defaultMarker);
          Context mContext = context;
        }

    @Override
    protected OverlayItem createItem(int i) {
        // TODO Auto-generated method stub
        return mOverlays.get(i);
    }

    @Override
    public int size() {
        // TODO Auto-generated method stub
        return mOverlays.size();
    }

    @Override
    protected boolean onTap(int index) {
      OverlayItem item = mOverlays.get(index);
      Context mContext = null;
      AlertDialog.Builder dialog = new AlertDialog.Builder(mContext);
      dialog.setTitle(item.getTitle());
      dialog.setMessage(item.getSnippet());
      dialog.show();
      return true;
    }

}

最佳答案

您缺少主类中的上下文。

添加这个:

HelloItemizedOverlay itemizedoverlay = new HelloItemizedOverlay(drawable, mContext);
where mContext = this;

而不是这个:

HelloItemizedOverlay itemizedoverlay = new HelloItemizedOverlay(drawable);

关于使用 onTap() 时,Android 谷歌地图 View 返回错误 - 应该显示 Alertdialog,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4781601/

相关文章:

javascript - Google Maps API imagePath 本地镜像无法正常工作

android - 找不到参数的方法 android() ... flutter.gradle 问题

ios - GMSMapView 在 iOS 中放大或缩小时显示 GMSMarker 计数

javascript - Google Maps API V3 和 Javascript 结果和标记

google-maps - 如何设置缩放以适应谷歌地图中的圆圈

android - 未设置 PlaceSelectionListener。不会传递任何结果

java - 添加第二个 TextView 替换 LinearLayout 中的第一个 TextView

java - 如何在启动时仅对 Android View 进行一次动画处理?

android - Android 应用程序中数据库 Assets 的正确路径

javascript - 在谷歌地图中滑动 div