Autore Topic: Posizione assoluta di un item in una ListView  (Letto 693 volte)

Offline blackgin

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1387
  • Respect: +164
    • Google+
    • blackgins
    • blackginsoft
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Nexus
  • Sistema operativo:
    Mac OSX 10.8
Posizione assoluta di un item in una ListView
« il: 29 Ottobre 2010, 21:34:22 CEST »
0
Ho una listview su cui c'é un OnItemClickListener
Codice (Java): [Seleziona]
listview.setOnItemClickListener(new OnItemClickListener(){
            @Override
            public void onItemClick(AdapterView<?> l, View v, int position, long id) {
                //qua uso position                
            }});

Ora la ListView é filtrata, cioé ho un EditText che mi permette di filtrare la Lista. Quando filtra, nella listview appaiono solo X valori corrispondenti.
Se ne seleziono uno di questi, mi ritorna come position la posizione dell'item relativa alla lista in quel momento.
Esempio:
Lista intera 20 elementi
Inizio a scrivere una parola per filtrare e mi visualizza solo 5 elementi.
Quando clicco su uno di questi, mi da un valore da 0 a 4 e non un valore tra 0 e 19, cioé la position che avrebbe nella listview intera.
Come posso fare per ottenere la position assoluta?
Postate il LogCat LogCat LogCat LogCat LogCat

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Posizione assoluta di un item in una ListView
« Risposta #1 il: 29 Ottobre 2010, 21:50:43 CEST »
0
Perchè non lavori tramite gli id degli elementi?

Devi solo implementare il metodo

http://developer.android.com/reference/android/widget/Adapter.html#getItemId(int)

dell'adapter.

Offline JD

  • Amministratore
  • Utente storico
  • *****
  • Post: 1600
  • Respect: +232
    • leinardi
    • Mostra profilo
  • Dispositivo Android:
    LG Nexus 5
  • Sistema operativo:
    L'ultima Ubuntu
Re:Posizione assoluta di un item in una ListView
« Risposta #2 il: 30 Ottobre 2010, 00:45:22 CEST »
0
Quoto, meglio lavorare con gli ID...
È stata trovata una soluzione al tuo problema?
Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato ;).
E se hai aperto tu il thread marcalo come risolto cliccando !

Offline blackgin

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1387
  • Respect: +164
    • Google+
    • blackgins
    • blackginsoft
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Nexus
  • Sistema operativo:
    Mac OSX 10.8
Re:Posizione assoluta di un item in una ListView
« Risposta #3 il: 30 Ottobre 2010, 12:09:42 CEST »
0
L'id non é quello che ottengo anche tramite onItemClick?
Se la risposta é si, succede la stessa cosa che succede con la position
Postate il LogCat LogCat LogCat LogCat LogCat

Offline JD

  • Amministratore
  • Utente storico
  • *****
  • Post: 1600
  • Respect: +232
    • leinardi
    • Mostra profilo
  • Dispositivo Android:
    LG Nexus 5
  • Sistema operativo:
    L'ultima Ubuntu
Re:Posizione assoluta di un item in una ListView
« Risposta #4 il: 30 Ottobre 2010, 12:30:38 CEST »
0
Come ha già detto ricky devi implementare il metodo, altrimenti l'id risulterà uguale alla position...
È stata trovata una soluzione al tuo problema?
Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato ;).
E se hai aperto tu il thread marcalo come risolto cliccando !

Offline AndFan

  • Nuovo arrivato
  • *
  • Post: 19
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC Tattoo
Re:Posizione assoluta di un item in una ListView
« Risposta #5 il: 10 Agosto 2011, 15:06:04 CEST »
0
ho esattamente la stessa esigenza dell'autore del topic. Al momento io popolo la listview in questo modo, come da vostro tutorial:
(la variabile data è di tipo List<Persona> e contiene appunto la lista di tutte le persone con i relativi dati)
Codice (Java): [Seleziona]
ArrayList<HashMap<String, Object>> dati_persona=new ArrayList<HashMap<String,Object>>();
                for(int i=0;i<data.size();i++)

            Persona p=data.get(i);// per ogni persona
           
            //hashmap per rappresentare correttamente i dati
            HashMap<String,Object> PersonaMap=new HashMap<String, Object>();
            //aggiunta degli elementi alla hashmap
                       
           PersonaMap.put("cognomenome", p.getCognome()+" "+ p.getNome());
           dati_persona.add(ProfMap);  //aggiungiamo la mappa di valori alla sorgente dati
        }
               
        String[] from={"cognomenome"}; //dai valori contenuti in queste chiavi
        int[] to={R.id.vocePersona};//agli id delle view
               
        //costruzione dell adapter
        final SimpleAdapter myadapter=new SimpleAdapter(
                        getApplicationContext(),
                        dati_persona,//sorgente dati
                        R.layout.row, //layout contenente gli id di "to"
                        from,
                        to);
               
               
        //identifico la listview, associo l'adapter
        lv = (ListView)findViewById(R.id.myListView);
                lv.setAdapter(myadapter);

quindi associo un listener
Codice (Java): [Seleziona]
lv.setOnItemClickListener(new OnItemClickListener()
                {
            public void onItemClick(AdapterView<?> parent, View view,int position, long id)
            {
                        MostraDialog(data.get(position));
            }
        });
dove MostraDialog è un metodo che semplicemente mostra un alertdialog con stampati i dati della persona (nome cognome e data di nascita).

Fin qui non ho problemi.

Ho provato ad aggiungere un edittext per poter filtrare la listview
Codice (Java): [Seleziona]
//identifico l'edittext e associo il listener
        filtro = (EditText) findViewById(R.id.rubricaEditText);
        filtrot.addTextChangedListener(new TextWatcher()
        {
                 
            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                adapter.getFilter().filter(s.toString());
            }
 
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
            }
 
            @Override
            public void afterTextChanged(Editable s) {
            }
        });
la lista viene correttamente filtrata in base all'input dell'utente, ma in questo modo si sballano i dati mostrati dal popup (come appunto è successo all'autore originale del topic).

Non ho ben capito la vostra soluzione proposta. Potreste darmi altre delucidazioni?