Autore Topic: ListView con editText ( o checkbox) e prelievo dello stato degli elementi  (Letto 2038 volte)

Offline dodopepper

  • Utente junior
  • **
  • Post: 124
  • Respect: +4
    • Mostra profilo
  • Dispositivo Android:
    HTC Magic 32a black
Salve ragazzi, ho creato in un'activity due listView seguendo questo ottimo tutorial [medio] ListView con layout personalizzato tramite un SimpleAdapter - Android Developers Italia

Ho creato in particolare una list view con due TextView e una checkbox in ogni riga (l'altra è analoga solo che al posto della checkbox c'è un'editText)

Vorrei sapere come posso, alla pressione di un button interrogare ciascuna riga e in particolare ciascun elemento di ciascuna riga?
Dovrei far partire per ogni riga una chiamata ad un Web Service con i campi contenuti in ciascuna riga della view e in particolare con i valori inseriti dall'utente nelle checkbox o nelle edit text.

Ho letto varie discussioni ma davvero non so dove mettere mano, qualcuno mi può aiutare? Grazie mille

Offline dodopepper

  • Utente junior
  • **
  • Post: 124
  • Respect: +4
    • Mostra profilo
  • Dispositivo Android:
    HTC Magic 32a black
Re:ListView con editText ( o checkbox) e prelievo dello stato degli elementi
« Risposta #1 il: 08 Dicembre 2011, 11:23:46 CET »
0
up.... O:-)

Offline Verandi

  • Moderatore
  • Utente normale
  • *****
  • Post: 378
  • Respect: +75
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:ListView con editText ( o checkbox) e prelievo dello stato degli elementi
« Risposta #2 il: 08 Dicembre 2011, 11:37:07 CET »
+1
Ciao! Nell'onItemClick() della listView, ti viene passata la riga vera e propria nel parametro v. Per trovare una view all'interno della riga, per esempio l'editText, basta che tu faccia v.findViewById(id dell'editText). :)

Offline dodopepper

  • Utente junior
  • **
  • Post: 124
  • Respect: +4
    • Mostra profilo
  • Dispositivo Android:
    HTC Magic 32a black
Re:ListView con editText ( o checkbox) e prelievo dello stato degli elementi
« Risposta #3 il: 08 Dicembre 2011, 11:39:03 CET »
0
Umh si questa cosa l'avevo provata solo che addirittura se faccio la selezione mi seleziona di una riga poi faccio scroll  mi seleziona altre righe e inoltre nelle editText non mi fa scrivere, cioè se ci tappo sopra si apre la casella ma se scrivo non prende il testo...

Offline Verandi

  • Moderatore
  • Utente normale
  • *****
  • Post: 378
  • Respect: +75
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:ListView con editText ( o checkbox) e prelievo dello stato degli elementi
« Risposta #4 il: 08 Dicembre 2011, 11:45:22 CET »
+1
La selezione multipla è dovuta al riciclo delle view. Per l'editText credo sia un problema di focus. Bisognerebbe vedere il codice.  ;-)

Offline dodopepper

  • Utente junior
  • **
  • Post: 124
  • Respect: +4
    • Mostra profilo
  • Dispositivo Android:
    HTC Magic 32a black
Re:ListView con editText ( o checkbox) e prelievo dello stato degli elementi
« Risposta #5 il: 08 Dicembre 2011, 11:47:33 CET »
0
Mmmh devo togliere parti delicate poi lo allego volentieri, cmq di fatto il problema è che anche gestendo il prelievo nel metodo onClick dovrei crearmi delle strutture di appoggio per memorizzare tutti i valori e poi "inviarli" quando l'utente preme il bottone....

Offline Verandi

  • Moderatore
  • Utente normale
  • *****
  • Post: 378
  • Respect: +75
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:ListView con editText ( o checkbox) e prelievo dello stato degli elementi
« Risposta #6 il: 08 Dicembre 2011, 12:42:52 CET »
+1
Mmmh devo togliere parti delicate poi lo allego volentieri, cmq di fatto il problema è che anche gestendo il prelievo nel metodo onClick dovrei crearmi delle strutture di appoggio per memorizzare tutti i valori e poi "inviarli" quando l'utente preme il bottone....
Avevo capito male, nel senso che credevo avessi un button per riga.   ;-)
Per il focus basta che nell'onCreate usi il listView.setDescendantFocusability(ViewGroup.FOCUS_AFTER_DESCENDANTS) in modo che la listView non rubi il focus all'editText.

Per i valori, in un'ipotetica situazione ideale, basta che, alla pressione del pulsante, tu prenda le righe che ti interessano con il metodo listview.getChildAt(indice) e per ogni riga trovi l'editText in cui richiamare il getText().
Purtroppo, però, come hai sperimentato, c'è il problema del riciclo delle view che, sia durante il pan all'apertura della tastiera, che durante lo scroll, va a creare problemi. Per esempio:
- Selezioni l'edittext della prima riga -> si apre la tastiera e la listView ridisegna le righe -> la tua view viene riciclata in un'altra riga e quindi ti ritrovi selezionata l'editText di un'altra riga.
- Scrivi del testo nell'edittext di una riga -> scrolli -> la riga viene riciclata -> ti ritrovi il testo in altre editText in posizioni random.

L'unica soluzione che mi viene in mente è salvare sia gli stati del focus delle editText, sia il testo. Nel metodo getView dell'adapter, poi, li setti all'editText della riga in base alla posizione.
Non so se ci sia un altro metodo più semplice.  :-)
« Ultima modifica: 08 Dicembre 2011, 12:44:37 CET da Verandi »

Offline dodopepper

  • Utente junior
  • **
  • Post: 124
  • Respect: +4
    • Mostra profilo
  • Dispositivo Android:
    HTC Magic 32a black
Re:ListView con editText ( o checkbox) e prelievo dello stato degli elementi
« Risposta #7 il: 08 Dicembre 2011, 16:13:56 CET »
0
Che intendi per salvare gli stati? ad ogni evento di tocco sulla listview dici  di salvare in una qualche struttura dati lo stato? Ma io ogni caso non so poi come forzare la rilettura evitando l'eventuale riciclo.....Usando il getView dell'adapter mica mi restituisce tutte le view contenute nella lista?

Offline dodopepper

  • Utente junior
  • **
  • Post: 124
  • Respect: +4
    • Mostra profilo
  • Dispositivo Android:
    HTC Magic 32a black
Re:ListView con editText ( o checkbox) e prelievo dello stato degli elementi
« Risposta #8 il: 08 Dicembre 2011, 16:19:26 CET »
0
Ho cercato di capire che codice potessi allegare alla discussione ma non c'è niente di pertinente. Ho queste due listView che ho creato usando il tutorial di cui al primo post e poi ho questo problema, davvero non so da dove partire diamine!

Offline Verandi

  • Moderatore
  • Utente normale
  • *****
  • Post: 378
  • Respect: +75
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:ListView con editText ( o checkbox) e prelievo dello stato degli elementi
« Risposta #9 il: 08 Dicembre 2011, 16:42:23 CET »
0
Che intendi per salvare gli stati? ad ogni evento di tocco sulla listview dici  di salvare in una qualche struttura dati lo stato? Ma io ogni caso non so poi come forzare la rilettura evitando l'eventuale riciclo.....Usando il getView dell'adapter mica mi restituisce tutte le view contenute nella lista?

Dovrai usare un adapter personalizzato usando una classe che estenda BaseAdapter. Al momento non ho abbastanza tempo per farti un esempio completo, ma nel forum c'è già qualcosa.
Tra l'altro, non hai lo stesso problema con le checkBox dell'altra listView? Ovvero, quando fai lo scroll non ti si duplicano le checkbox selezionate?
 

Offline dodopepper

  • Utente junior
  • **
  • Post: 124
  • Respect: +4
    • Mostra profilo
  • Dispositivo Android:
    HTC Magic 32a black
Re:ListView con editText ( o checkbox) e prelievo dello stato degli elementi
« Risposta #10 il: 08 Dicembre 2011, 16:44:36 CET »
0
sisi si duplicano anche li.
Dunque dovrei sostituire il simple adapter con il base adapter? Volevo evitare tutto sto casino, mi comporterebbe un dispendio di tempo non indifferente!

Offline Verandi

  • Moderatore
  • Utente normale
  • *****
  • Post: 378
  • Respect: +75
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:ListView con editText ( o checkbox) e prelievo dello stato degli elementi
« Risposta #11 il: 08 Dicembre 2011, 16:58:09 CET »
0
Purtroppo sì.  :-)

Offline salvatore.zagarella

  • Utente normale
  • ***
  • Post: 239
  • Respect: +2
    • Mostra profilo
    • Ieeng Solution
Re:ListView con editText ( o checkbox) e prelievo dello stato degli elementi
« Risposta #12 il: 04 Ottobre 2012, 17:13:53 CEST »
0
Scusate raga..so che è un post vecchio ma forse mi potete aiutare..

Io ho una listView con delle editText ma queste risultano essere NON modificabili.. Ho usato
listView.setDescendantFocusability(ViewGroup.FOCUS_AFTER_DESCENDANTS)
ma non è cambiato nulla...