2013-04-25 7 views
1

Я хочу сделать приложение-маркер с помощью Google Maps, но. У меня проблема с onMarkerClick с помощью переключателя Case, Iam, использующего массив для добавления Marker в My Application, и когда маркер OnCLick он может вызывать разные действия для каждого маркера. У меня есть проблема об этом. Как я могу использовать onMarkerClick с ключом для моего приложения. . ??? Пожалуйста помоги . Вот мой код:onMarkerClick using 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; 
        } 
       }); 
      } 

      } 
+0

лучшее, что я предполагаю, что это сделать ArrayList и добавить каждый маркер вы делаете то IndexOf (v) и используйте кожух переключателя с индексом вы получите, но если вы сделаете это вы, минас, просто используете маркер без корпуса коммутатора, я не думаю, что для этого действительно существует надежный случай переключения, idk, каковы определяющие факторы для ваших маркеров, чтобы начать работу, используйте их, если еще если – JRowan

+0

вы можете мне дать образец ... или исправьте мой код .. потому что я не слишком понимаю, что ты имеешь в виду .. спасибо .. –

+0

Я поставил его, я не думаю, что действительно есть доступный случай переключения, потому что это занимает int, это меня thod дает маркер, вы можете вернуть int из hashcode из маркера, но я не знаю, как это относится к маркеру – JRowan

ответ

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; 
       } 
      }); 
+0

спасибо..другу .. но я думаю, что лучше, если моя работа будет запущена. Как я могу показать свой маркер ..? и мой информационный щелчок окна может вызвать активность .. но когда Iam с помощью infoWindow моя ошибка приложения .. вы можете помочь снова .. спасибо, брату! –

+0

Я никогда не использовал infoWindow, я использую AlertDialog's – JRowan

0

класс Marker, если окончательный, так что вы не можете расширить его и добавить свои собственные атрибуты. Вам придется справиться с этим, используя свою собственную логику.

Вы можете сделать это двумя способами.

У вас уже есть список данных со всеми данными маркера.

1) Вы можете попробовать установить атрибут «snippet» маркера с индексом массива массива данных и onMarkerClick, вы можете заставить Snippet изменить его обратно на int, и это будет вашим индексом Data Array. Таким образом, вы можете получить этот маркеры с щелчком и объект 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);