Autore Topic: Lista con sezioni e celle custom differenti  (Letto 586 volte)

Offline k3v1n

  • Utente junior
  • **
  • Post: 61
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung S3
Lista con sezioni e celle custom differenti
« il: 14 Marzo 2013, 16:04:02 CET »
0
Salve a tutti,

devo creare una lista avente N sezioni, diciamo N=3. Le tre sezioni hanno celle con layout differente. Sapre dirmi come dovrei gestire la lista e l'adapter? Ho trovato diversi articoli in rete ma nessuno che abbia le celle con layout differentre tra una sezione ed un'altra. Su iOS non avrei problemi, su Android non saprei come gestirla.

Consigli?

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:Lista con sezioni e celle custom differenti
« Risposta #1 il: 14 Marzo 2013, 19:41:58 CET »
0
Puoi fare un esempio di quello che vorresti ottenere?
Postate il LogCat LogCat LogCat LogCat LogCat

Offline k3v1n

  • Utente junior
  • **
  • Post: 61
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung S3
Re:Lista con sezioni e celle custom differenti
« Risposta #2 il: 14 Marzo 2013, 20:10:10 CET »
0
Puoi fare un esempio di quello che vorresti ottenere?

Immagina un tabellino di una partita di calcio.

Prima sezione titolari
Seconda sezione panchinari
Terza sezione eventi della partita

Ho già implementato la soluzione per iOS utilizzando una tabella con 3 sezioni. Le righe della tabella non sono tutte uguali ma variano in base alla sezione quindi dovrei definire 3 xml layout, uno per ciascuna sezione

Spero di aver chiarito il problema

Luca

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:Lista con sezioni e celle custom differenti
« Risposta #3 il: 15 Marzo 2013, 00:06:04 CET »
0
se sono 3 sezioni da max 11 elementi in totale non ti serve una listview e un adapter, puoi farti le celle (dinamicamente partendo dai 3 layout che ti fai) e farti gli inflate da codice, sono solo 11 layout alla fine
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 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:Lista con sezioni e celle custom differenti
« Risposta #4 il: 15 Marzo 2013, 00:51:35 CET »
0
Altrimenti, se vuoi usare listview + adapter, devi definire tre layout, uno per ogni sezione e crearti un custom adapter.
Nel metodo getView dell'adapter, a seconda della sezione in cui ti trovi, ritorni la view con il layout corrispondente.
Codice (Java): [Seleziona]
public View getView(int position, View convertView, ViewGroup parent) {
    LayoutInflater inflater = (LayoutInflater) context
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View rowView;
    if (sezione1) {
       rowView = inflater.inflate(R.layout.row1, parent, false);
    } else if(sezione2) {
       rowView = inflater.inflate(R.layout.row2, parent, false);
    } else if(sezione3) {
       rowView = inflater.inflate(R.layout.row3, parent, false);
    }
    [...]
    return rowView;
  }
La condizione degli if, ovviamente, dipende da come tratti le sezioni, esempi:
In base alla posizione -> sezione1 = position < 11
In base al tipo di oggetto -> sezione1 = getItem(position).isTitolare()
« Ultima modifica: 15 Marzo 2013, 00:54:40 CET da blackgin »
Postate il LogCat LogCat LogCat LogCat LogCat

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:Lista con sezioni e celle custom differenti
« Risposta #5 il: 15 Marzo 2013, 10:01:07 CET »
0
Altrimenti, se vuoi usare listview + adapter, devi definire tre layout, uno per ogni sezione e crearti un custom adapter.
Nel metodo getView dell'adapter, a seconda della sezione in cui ti trovi, ritorni la view con il layout corrispondente.
Codice (Java): [Seleziona]
public View getView(int position, View convertView, ViewGroup parent) {
    LayoutInflater inflater = (LayoutInflater) context
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View rowView;
    if (sezione1) {
       rowView = inflater.inflate(R.layout.row1, parent, false);
    } else if(sezione2) {
       rowView = inflater.inflate(R.layout.row2, parent, false);
    } else if(sezione3) {
       rowView = inflater.inflate(R.layout.row3, parent, false);
    }
    [...]
    return rowView;
  }
La condizione degli if, ovviamente, dipende da come tratti le sezioni, esempi:
In base alla posizione -> sezione1 = position < 11
In base al tipo di oggetto -> sezione1 = getItem(position).isTitolare()

vero, però ho paura che su schermi più piccoli (dove vedi 3-4 elementi massimo) se inizi a scrollare su e giù gli fai fare tanti di quegli inflate che non ti immagini....
non potendo usare il viewHolder la cosa non è ottimizzata, a meno che non si tiene nel view holder le tre versioni, ma anche li, essendo le liste a sezioni è difficile che venga riciclata la view corretta....

A far bene andrebbero provate entrambe le cose, sicuramente la cosa che ti ho detto io è più pallosa a livello di codice, ma azzardo a dire che potrebbe avere un overhead maggiore all'inizio ma poi essere più performante in fase di scroll (che dici tu blackgin? non son sicurissimo di quello che dico, è solo teoria la mia)
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 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:Lista con sezioni e celle custom differenti
« Risposta #6 il: 15 Marzo 2013, 12:03:16 CET »
0
A far bene andrebbero provate entrambe le cose, sicuramente la cosa che ti ho detto io è più pallosa a livello di codice, ma azzardo a dire che potrebbe avere un overhead maggiore all'inizio ma poi essere più performante in fase di scroll (che dici tu blackgin? non son sicurissimo di quello che dico, è solo teoria la mia)
Beh anche io credo che sia cosí, essendo la tua struttura statica..
Postate il LogCat LogCat LogCat LogCat LogCat