Autore Topic: Settare dinamicamente i dati dell'InfoWindow da ArrayList  (Letto 424 volte)

Offline AndrewDev

  • Nuovo arrivato
  • *
  • Post: 5
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Sistema operativo:
    Mac OS X 10.9.5
Settare dinamicamente i dati dell'InfoWindow da ArrayList
« il: 17 Ottobre 2014, 11:07:54 CEST »
0
Il mio progetto usa le API 19 e il dispositivo su cui sto testando il progetto usa le API 19.
Nel mio progetto c'è un ArrayList con dei dati con cui vorrei popolare degli InfoWindow. Se uso il metodo Snippet sul Marker, mi mostra i dati dinamicamente, ma tutti su una riga, dato che il metodo Snippet non recepisce il ritorno a capo "/n" o qualsiasi altro metodo, sono costretto a usare un CustomInfoWindowAdapter. Se io uso il mio CustomInfoWindowAdapter mi mostra i dati su righe differenti come dovrei ma ogni InfoWindow mostra gli stessi dati. Cosa sbaglio?  ???

Questa è la mia classe CustomInfoWindowAdapter
Codice (Java): [Seleziona]
class MarkerInfoWindowAdapter implements InfoWindowAdapter {

        private View inflatedView;
        private View tempView;
        private String title, description;

        public void setTitle(String title) {
            this.title = title;
        }

        public void setDescription(String description) {
            this.description = description;
        }

        MarkerInfoWindowAdapter() {
            inflatedView = getLayoutInflater().inflate(R.layout.info_window_layout, null);
         //   tempView = getLayoutInflater().inflate(R.layout.location_content_window, null);
        }

        @Override
        public View getInfoContents(Marker marker) {
          //  setInfo(marker, inflatedView);
            return inflatedView;
        }

        @Override
        public View getInfoWindow(Marker marker) {
           setInfo(marker, inflatedView);
            return inflatedView;
        }

        private void setInfo(Marker marker, View view) {
            final TextView txtTitle = (TextView) view.findViewById(R.id.title);
            final TextView txtDescription = (TextView) view.findViewById(R.id.lat_lng);
            txtTitle.setText(title);
            txtDescription.setText(description);
        }
    }

E questo è il metodo in cui creo il Marker e l'InfoWindow da ArrayList.
Codice (Java): [Seleziona]
public void drawRoute(HashMap<String, ArrayList<HashMap<String, String>>> result, String type) {
        ArrayList<HashMap<String, String>> voyageplan = result.get("optimal");
        HashMap<String, String> waypoint1;

        for (int i = 0; i < voyageplan.size(); i++) {

            waypoint1 = voyageplan.get(i);        

            googleMap.addMarker(new MarkerOptions().position(position)
             .title("WP# "+waypoint1.get("WP").toString()+" (optimal)")
             .snippet("prova")
             .anchor(0.5f, 0.5f).draggable(false)    
             .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_MAGENTA)));

            infoWindowAdapter = new MarkerInfoWindowAdapter();
            infoWindowAdapter.setTitle(voyageplan.get(i).get("WP"));
            infoWindowAdapter.setDescription(voyageplan.get(i).get("lat"));
            googleMap.setInfoWindowAdapter(infoWindowAdapter);
    }

Grazie in anticipo per il vostro aiuto  :-)
« Ultima modifica: 17 Ottobre 2014, 11:47:49 CEST da AndrewDev »

Offline Nicola_D

  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:Settare dinamicamente i dati dell'InfoWindow da ArrayList
« Risposta #1 il: 17 Ottobre 2014, 11:51:04 CEST »
0
Codice (Java): [Seleziona]
infoWindowAdapter = new MarkerInfoWindowAdapter();
            infoWindowAdapter.setTitle(voyageplan.get(i).get("WP"));
            infoWindowAdapter.setDescription(voyageplan.get(i).get("lat"));
            googleMap.setInfoWindowAdapter(infoWindowAdapter);

ad ogni marker (step del ciclo) ricrei l'adapter e lo setti a googleMap.
Quando arrivi all'ultimo marker, crei l'adapter, lo imposti ALLA MAPPA e quindi il(i) marker precedenti vengono sovrascritti.
Un adapter non è una view,ma una cosa che "si adatta". L'adapter è uno per tutta la mappa e deve, in base al marker che riceve, SCEGLIERE quali dati mostrare e generare la view.
Quello che tu sbagli è che crei un adapter per ogni marker. La logica di set title e setDescription devono stare nell'adapter, che deve saper associare il marker ai relativi dati.
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline AndrewDev

  • Nuovo arrivato
  • *
  • Post: 5
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Sistema operativo:
    Mac OS X 10.9.5
Re:Settare dinamicamente i dati dell'InfoWindow da ArrayList
« Risposta #2 il: 17 Ottobre 2014, 12:05:59 CEST »
0
Anche se ne creo uno di Adapter, spostando all'inizio del ciclo
Codice (Java): [Seleziona]
 infoWindowAdapter = new MarkerInfoWindowAdapter(); comunque mi mostra sempre per ogni InfoWindow dei Marker l'ultimo set di dati caricati dall'ArrayList. La logica di setTitle e setDescription sono già nella classe MarkerInfoWindowAdapter

Offline Nicola_D

  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:Settare dinamicamente i dati dell'InfoWindow da ArrayList
« Risposta #3 il: 17 Ottobre 2014, 15:29:40 CEST »
0
si per forza, perchè te crei un adapter che contiene 1 solo titolo e 1 descrizione e ogni volta li sovrascrivi! un adapter deve contenere TUTTI i set di dati!
Devi seguire l'idea di adapter che c'è per il cursor e simple adapter
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia