Autore Topic: Impedire a listView di distruggere/ricreare celle  (Letto 2593 volte)

Offline Phate

  • Utente junior
  • **
  • Post: 123
  • Respect: +6
    • Mostra profilo
  • Dispositivo Android:
    Samsung galaxy S
  • Sistema operativo:
    Windows 7
Impedire a listView di distruggere/ricreare celle
« il: 10 Agosto 2012, 19:27:09 CEST »
0
E' possibile? Il fatto è che la chiamata a BindView ripetuta mi causa problemi..

Offline Nicola_D

  • Moderatore
  • 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:Impedire a listView di distruggere/ricreare celle
« Risposta #1 il: 10 Agosto 2012, 19:38:43 CEST »
0
E' possibile? Il fatto è che la chiamata a BindView ripetuta mi causa problemi..
no, devi adattare tu il codice! la chiamata ripetuta è fatta apposta per ottimizzare le performance!
che problemi ti causa?
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 Phate

  • Utente junior
  • **
  • Post: 123
  • Respect: +6
    • Mostra profilo
  • Dispositivo Android:
    Samsung galaxy S
  • Sistema operativo:
    Windows 7
Re:Impedire a listView di distruggere/ricreare celle
« Risposta #2 il: 10 Agosto 2012, 19:59:11 CEST »
0
Ho un cronometro per ogni cella...se abbasso la lista il cronometro si resetta, o peggio si avvia su un'altra cella

Offline Nicola_D

  • Moderatore
  • 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:Impedire a listView di distruggere/ricreare celle
« Risposta #3 il: 10 Agosto 2012, 20:11:25 CEST »
0
Ho un cronometro per ogni cella...se abbasso la lista il cronometro si resetta, o peggio si avvia su un'altra cella
un cronometro in una listview è un po esagerato... quanti cronometri devi gestire? infiniti?
il mio consiglio è di avere un "modello dati" con un ID per ogni cronometro, il modello dati contiene gli aggiornamenti dei cronometri, mentre l'adapter si occupa solo di reperire il tempo di un certo cronometro con un certo ID e mostrarlo.


Se però i cronometri che gestisci sono 1 2 o una decina, piuttosto fatti un linear layout e ogni cronometro è una nuova riga (insomma una list view semplificata), cosi ti eviti tanti giri...
se invece vuoi un numero infinito di cronometri (e non puoi farne a meno), usa il modello 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 Phate

  • Utente junior
  • **
  • Post: 123
  • Respect: +6
    • Mostra profilo
  • Dispositivo Android:
    Samsung galaxy S
  • Sistema operativo:
    Windows 7
Re:Impedire a listView di distruggere/ricreare celle
« Risposta #4 il: 10 Agosto 2012, 20:12:57 CEST »
0
Potresti farmi un esempio della prima soluzione?Si i cronometri sono tanti e poi la lista mi server per l'adapter...

Offline Nicola_D

  • Moderatore
  • 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:Impedire a listView di distruggere/ricreare celle
« Risposta #5 il: 10 Agosto 2012, 22:47:44 CEST »
0
nel forum ci sono tanti esempi che sfruttano le listview, ce ne sono basati su cursor (quindi database) oppure altri basati su oggetti java, vedi te quelli che si addicono di più al tuo caso!
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 Melanogaster

  • Utente normale
  • ***
  • Post: 260
  • Respect: +11
    • Mostra profilo
  • Dispositivo Android:
    SII
  • Sistema operativo:
    Kubuntu
Re:Impedire a listView di distruggere/ricreare celle
« Risposta #6 il: 11 Agosto 2012, 01:31:43 CEST »
0
Io odio nel vero senso della parola le ListView. Ogni volta che le uso mi creano problemi.
Ti consiglio, tramite modifiche particolari, di eseguire tu con un for una serie di inflater della maschera del tuo adapter...in questo modo lo scroll non ti creera' problemi. Non sara' il giusto modo di programmare, ma almeno in questo modo interfacce di un certo tipo non faticano a scrollare come nelle ListView...

Offline Phate

  • Utente junior
  • **
  • Post: 123
  • Respect: +6
    • Mostra profilo
  • Dispositivo Android:
    Samsung galaxy S
  • Sistema operativo:
    Windows 7
Re:Impedire a listView di distruggere/ricreare celle
« Risposta #7 il: 11 Agosto 2012, 02:45:20 CEST »
0
L'ideale per me sarebbe un bel linear layout dentro a una scrollview che si popoli tramite adapter...così risolverei tutti i miei problemi però temo non esista :(

Offline Melanogaster

  • Utente normale
  • ***
  • Post: 260
  • Respect: +11
    • Mostra profilo
  • Dispositivo Android:
    SII
  • Sistema operativo:
    Kubuntu
R: Re:Impedire a listView di distruggere/ricreare celle
« Risposta #8 il: 11 Agosto 2012, 06:43:26 CEST »
0
L'ideale per me sarebbe un bel linear layout dentro a una scrollview che si popoli tramite adapter...così risolverei tutti i miei problemi però temo non esista :(
Facendo come ti ho suggerito sopra ottieni proprio un risultato simile. Purtroppo non posso postarti codice dal telefono, quindi fai qualche ricerca sugli inflater ;)

Inviato dal mio GT-I9100 con Tapatalk 2

Offline Nicola_D

  • Moderatore
  • 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:Impedire a listView di distruggere/ricreare celle
« Risposta #9 il: 11 Agosto 2012, 09:21:39 CEST »
+1
beh mi sembra un po esagerato il discorso di melanogaster. Se dici che ogni volta che usi le ListView ti creano problemi allora il problema è che le usi male!

L'idea dell'inflater manuale ci sta se hai liste con numero limitato di oggetti, se cominci ad avere centinaia di entry te ne accorgi al volo che il riciclo delle view è necessario!
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 Phate

  • Utente junior
  • **
  • Post: 123
  • Respect: +6
    • Mostra profilo
  • Dispositivo Android:
    Samsung galaxy S
  • Sistema operativo:
    Windows 7
Re:Impedire a listView di distruggere/ricreare celle
« Risposta #10 il: 11 Agosto 2012, 10:08:39 CEST »
0
Purtroppo non riesco a trovare esempi nè su questo forum nè su google...forse non so cosa cercare!T_T
Allora...a me andrebbe anche bene fare a meno della listview, ma non posso rinunciare alla comodità dell'adapter! Insomma quello che mi serve è un qualcosa che si popoli per mezzo di un adapter, quindi un contenitore vuoto, un linearlayout va benissimo, dentro una scrollview...ma su cui posso fare setAdapter e addio.

In alternativa la listview va ancora bene....ma non so come accidenti gestire questa faccenda del cronometro!Cioè creo una batteria di cronometri indipendenti dall'item contenuto nella lista?

Offline iceweasel

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 878
  • Respect: +147
    • Mostra profilo
  • Dispositivo Android:
    LGE P990 - Google Nexus 5
  • Sistema operativo:
    Linux Debian Sid
Re:Impedire a listView di distruggere/ricreare celle
« Risposta #11 il: 11 Agosto 2012, 11:25:56 CEST »
+2
Adapter è uno dei tanti elementi presenti nel design pattern:

http://it.wikipedia.org/wiki/Adapter_pattern

Android lo usa in diversi contesti, nella ListView serve a fornire solo ed esclusivamente i dati visualizzati (e non tutti), usarlo in altri modi non consoni in generale si commette un errore.

La ListView viene spiegata molto bene in un Google I/O,:

http://www.google.com/events/io/2010/sessions/world-of-listview-android.html

consiglio di studiarlo con molta attenzione soprattutto come ottimizzarla, è fondamentale per scrivere software di qualità per Android e non è colpa della ListView se non la sapete usare ;-)
adb logcat | tee /tmp/logcat | grep TAG

Offline Phate

  • Utente junior
  • **
  • Post: 123
  • Respect: +6
    • Mostra profilo
  • Dispositivo Android:
    Samsung galaxy S
  • Sistema operativo:
    Windows 7
Re:Impedire a listView di distruggere/ricreare celle
« Risposta #12 il: 11 Agosto 2012, 12:20:57 CEST »
0
Credo di saperla usare in generale, ma non per risolvere il mio problema.

Offline Phate

  • Utente junior
  • **
  • Post: 123
  • Respect: +6
    • Mostra profilo
  • Dispositivo Android:
    Samsung galaxy S
  • Sistema operativo:
    Windows 7
Re:Impedire a listView di distruggere/ricreare celle
« Risposta #13 il: 11 Agosto 2012, 13:19:50 CEST »
0
Mmm..stavo pensando: se riuscissi a catturare l'evento in cui una cella sparisce dallo schermo (viene distrutta) potrei salvarmi il valore del timer e poi, nell'evento in cui viene ricreata (bind), ricavarmi per differenza il tempo passato e far ripartire il timer!
Però temo non esista l'evento "cella sparisce".. :(

Offline Nicola_D

  • Moderatore
  • 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:Impedire a listView di distruggere/ricreare celle
« Risposta #14 il: 11 Agosto 2012, 14:03:50 CEST »
0
Mmm..stavo pensando: se riuscissi a catturare l'evento in cui una cella sparisce dallo schermo (viene distrutta) potrei salvarmi il valore del timer e poi, nell'evento in cui viene ricreata (bind), ricavarmi per differenza il tempo passato e far ripartire il timer!
Però temo non esista l'evento "cella sparisce".. :(
tu guarda i link che ti hanno postato e capirai.
non hai bisogno di gestire nessun evento, lo fa già android, devi solo pensare a dove tenere i dati. Del resto un cronometro non è altro che
1-Una differenza di tempo tra now-start
2-Un "time" che viene fuori dal numero di millisecondi passati (questo in caso di supporto alle pause)

Ti devi fare una struttura dati che tiene un long... non credo sia un'impresa
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