Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    Rimozione ed inserimento intelligente da una lista

    Salve. Sono un po arruginito con le strutture dati e dovrei implementare un comportamento particolare.

    Ho una lista di oggetti, per ora un ArrayList:

    codice:
    ArrayList<Marker> markers;
    L'utente a seguito di un click in una posizione qualsiasi (si tratta di markers sulla mappa in android) aggiunge un marker sulla mappa, che va ad aggiungersi anche alla lista soprastante.

    Io poi utilizzo la lista per calcolare il percorso attraverso le posizioni relative ai vari markers aggiunti. Fin qui sembra tutto funzionare bene. Il problema nasce se l'utente decide di togliere qualche marker per migliorarne la posizione secondo le proprie esigenze. Quando l'utente rimuove dei marker (che vengono rimossi anche dalla lista) e poi ne aggiunge altri, questi ultimi vanno ad aggiungersi alla fine della lista e non dove sono stati rimossi i precedenti e questo provoca la creazione di un percorso non conforme alle idee dell'utente. Come posso fare?

  2. #2
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    755
    Le liste, ArrayList compresa , hanno un metodo add (int index , Object o) dunque ti basterebbe conoscere la posizione del marker che stai rimuovendo dalla lista (non so ad esempio con i metodi indexOf e lastIndexOf ) e aggiungere il nuovo nella posizione precedentemente occupata dal Marker levato..no?

    http://docs.oracle.com/javase/7/docs...ArrayList.html

  3. #3
    L'utente potrebbe rimuovere anche più markers. Sto creando un'altra lista dove mettere le posizioni:

    codice:
    private ArrayList<Marker> mMarkersList;
    private ArrayList<Integer> removedMarkersPositions;
    Aggiunta

    codice:
    //Aggiungiamo un Marker
                Marker m = mGoogleMap.addMarker(new MarkerOptions().position(latLng));
                if(!removedMarkersPositions.isEmpty()) {
                    mMarkersList.add(removedMarkersPositions.get(0),m);
                    removedMarkersPositions.remove(0);
                }
                else {
                    mMarkersList.add(m);
                }
    Rimozione

    codice:
     marker.remove();
             removedMarkersPositions.add(mMarkersList.indexOf(marker));
             mMarkersList.remove(marker);
    Però crea ancora qualche incongruenza.

    Update metodo rimozione


    codice:
    public boolean onMarkerClick(Marker marker) {
            removedMarkersPositions.add(mMarkersList.indexOf(marker));
            mMarkersList.remove(marker);
            marker.remove();
            return true;
        }
    Update metodo aggiunta

    codice:
    Marker m = mGoogleMap.addMarker(new MarkerOptions().position(latLng));
                if(mMarkersList.isEmpty() && !removedMarkersPositions.isEmpty()) {
                    removedMarkersPositions.clear();
                }
                if(!removedMarkersPositions.isEmpty() && !mMarkersList.isEmpty()) {
                    mMarkersList.add(removedMarkersPositions.get(0),m);
                    removedMarkersPositions.remove(0);
                }
                else {
                    mMarkersList.add(m);
                }
    Così non da problemi, ma se l'utente rimuove più di un markers deve stare attento all'ordine e alla
    posizione dove li va a rimettere..

    Oddio dipende anche da come li rimuove.. è difficile farne il debug T_T
    Ultima modifica di Javino89; 28-01-2014 a 19:56

  4. #4
    Up, per favore mi serve una mano :P

    A quanto pare ora come ora la lista degli indici dei marker che ho rimosso viene riempita sempre
    con la stessa posizione del primo marker rimosso, perché rimuovendo i markers essi scalano
    dall'array list -.-
    Ultima modifica di Javino89; 29-01-2014 a 14:47

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.