onMarkerClick使用开关案例

时间:2013-04-25 01:55:21

标签: java android google-maps google-maps-markers

我想使用谷歌地图制作标记应用程序但是。我有关于onMarkerClick使用switch Case的问题,Iam使用数组将Marker添加到我的应用程序,当标记OnCLick时,他可以为每个标记调用不同的Activity。我有关于那个问题的问题。我如何使用onMarkerClick和我的应用程序的switch case。 ???请帮忙 。这是我的代码:

public static final String TAG = markerbanyak.TAG;
    final LatLng CENTER = new LatLng(43.661049, -79.400917);


    class Data {
        public Data(float lng, float lat, String title, String snippet, String icon) {
            super();
            this.lat = (float)lat;
            this.lng = (float)lng;
            this.title = title;
            this.snippet = snippet;
            this.icon = icon;
        }
        float lat;
        float lng;
        String title;
        String snippet;
        String icon;
    }

    Data[] data = {
            new Data(-79.400917f,43.661049f, "New New College Res",
                    "Residence building (new concrete high-rise)", "R.drawable.mr_kun"),
            new Data(-79.394524f,43.655796f, "Baldwin Street",
                    "Here be many good restaurants!", "R.drawable.mr_kun"),
            new Data(-79.402206f,43.657688f, "College St",
                    "Lots of discount computer stores if you forgot a cable or need to buy hardware.", "R.drawable.mr_kun"),    
            new Data(-79.390381f,43.659878f, "Queens Park Subway",
                    "Quickest way to the north-south (Yonge-University-Spadina) subway/metro line", "R.drawable.mr_kun"),
            new Data(-79.403732f,43.666801f, "Spadina Subway",
                    "Quickest way to the east-west (Bloor-Danforth) subway/metro line", "R.drawable.mr_kun"),
            new Data(-79.399696f,43.667873f, "St George Subway back door",
                    "Token-only admittance, else use Spadina or Bedford entrances!", "R.drawable.mr_kun"),
            new Data(-79.384163f,43.655083f, "Eaton Centre (megamall)",
                    "One of the largest indoor shopping centres in eastern Canada. Runs from Dundas to Queen.", "R.drawable.mr_kun"),
    };


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        this.requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.peta);

        SupportMapFragment supportMapFragment = (SupportMapFragment)
        getSupportFragmentManager().findFragmentById(R.id.map);

                // Getting a reference to the map
        mMap = supportMapFragment.getMap();

        Marker kuningan = mMap.addMarker(new MarkerOptions()
        .position(KUNINGAN)
        .title("Kuningan")
        .snippet("Kuningan ASRI")
        .icon(BitmapDescriptorFactory
        .fromResource(R.drawable.mr_kun)));

        mMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);

        mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(KUNINGAN, 2));

        // Zoom in, animating the camera.
        mMap.animateCamera(CameraUpdateFactory.zoomTo(10), 2000, null);



        }

     public void wisata(){

            if (mMap==null) {
                Log.d(TAG, "Map Fragment Not Found or no Map in it!!");
                return;
            }

            for (Data d : data) {
                LatLng location = new LatLng(d.lat, d.lng);
                Marker wisata =mMap.addMarker(new MarkerOptions()
                      .position(location)
                      .title(d.title)
                      .snippet(d.snippet)
                      .icon(BitmapDescriptorFactory.fromResource(R.drawable.mr_wis)));

                // Let the user see indoor maps where available.
                mMap.setIndoorEnabled(true);

                // Enable my-location stuff
                mMap.setMyLocationEnabled(true);

                // Move the "camera" (view position) to our center point.
                mMap.moveCamera(CameraUpdateFactory.newLatLng(CENTER));
                        // Then animate the markers while the map is drawing,
                // since you can't combine motion and zoom setting!
                        final int zoom = 14;
                        mMap.animateCamera(CameraUpdateFactory.zoomTo(zoom), 2000, null);

                mMap.setOnMarkerClickListener(new OnMarkerClickListener() {

                    @Override
                    public boolean onMarkerClick(Marker v) {
                        // TODO Auto-generated method stub
                        //(PLEASE HELP ME !!! :))

                        return false;
                    }
                });
            }

            }

2 个答案:

答案 0 :(得分:2)

                @Override
                public boolean onMarkerClick(Marker v) {
                    // TODO Auto-generated method stub
                    //(PLEASE HELP ME !!! :))
                 if(v.getTitle().contains("New New College Res")){
                    // do if marker has this title
                    }else if(v.getTitle().contains("Baldwin Street")){
                    // do if marker has this title
                    } // and so on
                    return false;
                }
            });

答案 1 :(得分:0)

Marker class if final,因此您无法扩展它并添加自己的属性。你必须使用自己的逻辑来处理这个问题。

你可以用两种方式做到这一点。

您已拥有包含所有标记数据的数据列表。

1)您可以尝试使用数据数组的数组索引设置Marker的“snippet”属性,并且在onMarkerClick上,您可以将Snippet更改回int,这将是您的数据数组的索引。所以你可以得到你点击的Marker和它的Data对象并做你想做的任何事情。

2)使用HashMap。

它看起来像这样

HashMap<Marker, Integer> hashMap = new HashMap<Marker, Integer>();

// now even in your loop where you are adding markers. you can also add that marker to this hashmap with the id of Data array's index.

hashMap.add(marker, indexOfDataArray);

// final in your onMarkerClick, you can just pass marker to hashMap and get indexOfDataArray and base of that do whatever you want to do.

int id = hashMap.get(marker);