2013-07-09 3 views
12

Sto visualizzando google map api v2 nella mia app. Ho impostato alcuni indicatori sulla mappa. Ho anche impostato il titolo e lo snippet sugli indicatori che vengono mostrati quando si fa clic sull'indicatore.Come ottenere evento click del testo del marker

Ora voglio chiamare una nuova attività quando si fa clic sul titolo del marcatore e non sul marcatore stesso.

map.setOnMarkerClickListner 

viene chiamato solo sul click del marcatore.

Ma io non voglio farlo. Voglio che il marcatore mostri il titolo e lo snippet sul click del marcatore, ma voglio richiamare una nuova attività sul click del titolo.

Qualche idea su come lo facciamo?

Grazie

+0

possibile duplicato del [Android Marker Clicca Funzione] (http://stackoverflow.com/questions/15455815/android-marker-click-function) – bummi

risposta

25

Per raggiungere questo obiettivo è necessario implementare setOnInfoWindowClickListener nel metodo getInfoContents in modo che un clic sulla finestra infoContents si sveglierà l'ascoltatore a fare ciò che si vuole, lo si fa in questo modo:

map.setInfoWindowAdapter(new InfoWindowAdapter() { 

      // Use default InfoWindow frame 
      @Override 
      public View getInfoWindow(Marker args) { 
       return null; 
      } 

      // Defines the contents of the InfoWindow 
      @Override 
      public View getInfoContents(Marker args) { 

       // Getting view from the layout file info_window_layout 
       View v = getLayoutInflater().inflate(R.layout.info_window_layout, null); 

       // Getting the position from the marker 
       clickMarkerLatLng = args.getPosition(); 

       TextView title = (TextView) v.findViewById(R.id.tvTitle); 
       title.setText(args.getTitle()); 

       map.setOnInfoWindowClickListener(new OnInfoWindowClickListener() {   
        public void onInfoWindowClick(Marker marker) 
        { 
         if (SGTasksListAppObj.getInstance().currentUserLocation!=null) 
         { 
          if (String.valueOf(SGTasksListAppObj.getInstance().currentUserLocation.getLatitude()).substring(0, 8).contains(String.valueOf(clickMarkerLatLng.latitude).substring(0, 8)) && 
            String.valueOf(SGTasksListAppObj.getInstance().currentUserLocation.getLongitude()).substring(0, 8).contains(String.valueOf(clickMarkerLatLng.longitude).substring(0, 8))) 
          { 
           Toast.makeText(getApplicationContext(), "This your current location, navigation is not needed.", Toast.LENGTH_SHORT).show(); 
          } 
          else 
          { 
           FlurryAgent.onEvent("Start navigation window was clicked from daily map"); 
           tasksRepository = SGTasksListAppObj.getInstance().tasksRepository.getTasksRepository(); 
           for (Task tmptask : tasksRepository) 
           { 
            String tempTaskLat = String.valueOf(tmptask.getLatitude()); 
            String tempTaskLng = String.valueOf(tmptask.getLongtitude()); 

            Log.d(TAG, String.valueOf(tmptask.getLatitude())+","+String.valueOf(clickMarkerLatLng.latitude).substring(0, 8)); 

            if (tempTaskLat.contains(String.valueOf(clickMarkerLatLng.latitude).substring(0, 8)) && tempTaskLng.contains(String.valueOf(clickMarkerLatLng.longitude).substring(0, 8))) 
            { 
             task = tmptask; 
             break; 
            } 
           } 

           Intent intent = new Intent(getApplicationContext() ,RoadDirectionsActivity.class); 
           intent.putExtra(TasksListActivity.KEY_ID, task.getId()); 
           startActivity(intent); 

          } 
         } 
         else 
         { 
          Toast.makeText(getApplicationContext(), "Your current location could not be found,\nNavigation is not possible.", Toast.LENGTH_SHORT).show(); 
         } 
        } 
       }); 

       // Returning the view containing InfoWindow contents 
       return v; 

      } 
     }); 
+0

Grazie mille :) Ha funzionato ! – Gaurav

+0

benvenuto @Gaurav, buona programmazione. –

+0

Heloo emil Adz, hw cn i Trasferisci il dettaglio del marcatore alla nuova attività cliccando su quel marcatore per favore qualsiasi corpo può aiutarmi su quello –

12

Per impostare un titolo su un marcatore:

marker.showInfoWindow(); 

Per impostare un click ascoltatore sul titolo:

googleMap.setOnInfoWindowClickListener(new OnInfoWindowClickListener() { 

    @Override 
    public void onInfoWindowClick(Marker arg0) { 
     // TODO Auto-generated method stub 

    } 
}); 
+0

dove si trova il metodo nel secondo snippet di codice che si desidera posizionare? Sto solo inserendolo nella classe Attività e continua a dirmi 'non è possibile risolvere il simbolo' setOnInfoWindowClickListener '' –

+0

Ciao @PatMyron, non sono sicuro, perché stai ricevendo questo. Hai importato l'ascoltatore? E dove stai posizionando il tuo codice? –

+0

È necessario importare il listener. –

0
/** 
* adding individual markers, displaying text on on marker click on a 
* bubble, action of on marker bubble click 
*/ 
private final void addLocationsToMap() { 
    int i = 0; 
    for (Stores store : storeList) { 
     LatLng l = new LatLng(store.getLatitude(), store.getLongtitude()); 

     MarkerOptions marker = new MarkerOptions() 
       .position(l) 
       .title(store.getStoreName()) 
       .snippet("" + i) 
       .icon(BitmapDescriptorFactory 
         .defaultMarker(BitmapDescriptorFactory.HUE_GREEN)); 
     googleMap.addMarker(marker); 
     ++i; 
    } 

    googleMap.setOnInfoWindowClickListener(new OnInfoWindowClickListener() { 

     @Override 
     public void onInfoWindowClick(Marker marker) { 

      try { 
       popUpWindow.setVisibility(View.VISIBLE); 
       Stores store = storeList.get(Integer.parseInt(marker 
         .getSnippet())); 

       // set details 
       email.setText(store.getEmail()); 
       phoneNo.setText(store.getPhone()); 
       address.setText(store.getAddress()); 

       // setting test value to phone number 
       tempString = store.getPhone(); 
       SpannableString spanString = new SpannableString(tempString); 
       spanString.setSpan(new UnderlineSpan(), 0, 
         spanString.length(), 0); 
       phoneNo.setText(spanString); 

       // setting test value to email 
       tempStringemail = store.getEmail(); 

       SpannableString spanString1 = new SpannableString(tempStringemail); 
       spanString1.setSpan(new UnderlineSpan(), 0, spanString1.length(), 0); 
       email.setText(spanString1); 

       storeLat = store.getLatitude(); 
       storelng = store.getLongtitude(); 

      } catch (ArrayIndexOutOfBoundsException e) { 
       Log.e("ArrayIndexOutOfBoundsException", " Occured"); 
      } 

     } 
    }); 

} 
4
GoogleMap mGoogleMap; 
mGoogleMap.setOnInfoWindowClickListener(new GoogleMap.OnInfoWindowClickListener() { 

        @Override 
        public void onInfoWindowClick(Marker arg0) { 
         Intent intent = new Intent(getBaseContext(), Activity.class); 
         String reference = mMarkerPlaceLink.get(arg0.getId()); 
         intent.putExtra("reference", reference); 

         // Starting the Activity 
         startActivity(intent); 
         Log.d("mGoogleMap1", "Activity_Calling"); 
        } 
       });