2012-11-15 11 views
12

Cerco di ottenere il valore di un elemento selezionato all'interno di un adattatore personalizzato su un listview. Provo questo con seguente codice:Ottieni il valore dell'articolo su OnItemClick Listview

public void onItemClick(AdapterView<?> parent, View v, 
         int position, long id) { 

        View curr = parent.getChildAt((int) id); 
        TextView c = (TextView)curr.findViewById(R.id.tvPopUpItem); 
        String playerChanged = c.getText().toString(); 

        Toast.makeText(Settings.this,playerChanged, Toast.LENGTH_SHORT).show(); 

       } 

All'inizio, se clicco, i valori sono buoni, ma una volta ho arrotolato e clicco su un altro elemento, ottengo il valore errato di tale elemento è fatto clic ... Qualche idea su cosa sta causando questo?

risposta

45

Il parametro v è la riga corrente. in modo da utilizzare:

public void onItemClick(AdapterView<?> parent, View v, int position, long id) { 
    TextView c = (TextView) v.findViewById(R.id.tvPopUpItem); 
    String playerChanged = c.getText().toString(); 

    Toast.makeText(Settings.this,playerChanged, Toast.LENGTH_SHORT).show(); 
} 

(Oppure si potrebbe usare getChildAt(position) ma questo sarebbe più lento.)

Capire si potrebbe essere in grado di semplificare questo più in base al layout.

+0

Grazie, funziona! Hai idea del motivo per cui la posizione getChildAt non ha funzionato? Ho anche provato questo, ma questo mi ha dato anche degli errori .. –

+1

A seconda dell'adattatore 'id' potrebbe riferirsi a un indice completamente diverso. Ad esempio, CursorAdapters restituisce la chiave primaria della tabella in 'id'. 'posizione' d'altra parte dovrebbe sempre fare riferimento al conteggio delle righe. – Sam

+0

@Sam Grazie, questo funziona per me ottimo lavoro !. –

0

Proprio Piccolo cambiamento è richiesto

TextView c = (TextView) v.findViewById(R.id.tvPopUpItem); 

Dal momento che si sta utilizzando visualizzazione personalizzata è necessario passare alla vista argomento a vostra OnItemClickListener allora avete bisogno di utilizzare tale valore per ottenere i dettagli di TextViews presenti in quel

+1

La prossima volta fai un commento, non pubblicare una risposta aggiuntiva. – sparticvs

0

Qui username è un campo di stringa dichiarato in una classe e devi oltrepassare il metodo getItem() nella classe adattatore per ottenere i dettagli della riga gonfiata quando fai clic.

Problemi correlati