Autore Topic: GridView vs RecyclerView + GridLayoutManager  (Letto 869 volte)

Offline wlf

  • Utente normale
  • ***
  • Post: 367
  • Respect: +8
    • Mostra profilo
  • Dispositivo Android:
    Xperia
GridView vs RecyclerView + GridLayoutManager
« il: 30 Maggio 2017, 10:50:12 CEST »
0
Salve,
che vantaggi/svantaggi ci sono utilizzare un widget rispetto all'altro?

Offline iClaude

  • Utente normale
  • ***
  • Post: 311
  • Respect: +25
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S8
  • Sistema operativo:
    Windows 10
Re:GridView vs RecyclerView + GridLayoutManager
« Risposta #1 il: 31 Maggio 2017, 09:10:10 CEST »
0
RecyclerView è una libreria più recente,  è più flessibile (es. puoi creare celle che occupano più colonne o con layout diversi) e implementa di default il pattern ViewHolder x migliorare le prestazioni.
Per contro il codice x gestirla personalmente lo trovo più complesso e non così chiaro come potrebbe essere.

Offline wlf

  • Utente normale
  • ***
  • Post: 367
  • Respect: +8
    • Mostra profilo
  • Dispositivo Android:
    Xperia
Re:GridView vs RecyclerView + GridLayoutManager
« Risposta #2 il: 31 Maggio 2017, 09:55:09 CEST »
0
Considera che gli elementi da far apparire al massimo saranno 5-6, quindi del ViewHolder x migliorare le prestazioni se ne potrebbe tranquillamente fare a meno! :D

Le celle devono avere tutte Layout identico; avrei però bisogno che una volta cliccato sopra una cella sotto appaia una serie di comandi, ma non con PopUpMenu, ma una serie di celle con Layout differente, magari swipeabili per aggiungere più comandi, un po' come c'è in qualche App iOS.

E' fattibile con una RecyclerView?

Offline iClaude

  • Utente normale
  • ***
  • Post: 311
  • Respect: +25
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S8
  • Sistema operativo:
    Windows 10
Re:GridView vs RecyclerView + GridLayoutManager
« Risposta #3 il: 31 Maggio 2017, 10:11:08 CEST »
0
Considera che gli elementi da far apparire al massimo saranno 5-6, quindi del ViewHolder x migliorare le prestazioni se ne potrebbe tranquillamente fare a meno! :D

Le celle devono avere tutte Layout identico; avrei però bisogno che una volta cliccato sopra una cella sotto appaia una serie di comandi, ma non con PopUpMenu, ma una serie di celle con Layout differente, magari swipeabili per aggiungere più comandi, un po' come c'è in qualche App iOS.

E' fattibile con una RecyclerView?

Non in automatico.
È cmq una cosa che devi creare tu.

Offline wlf

  • Utente normale
  • ***
  • Post: 367
  • Respect: +8
    • Mostra profilo
  • Dispositivo Android:
    Xperia
Re:GridView vs RecyclerView + GridLayoutManager
« Risposta #4 il: 31 Maggio 2017, 13:24:23 CEST »
0
Riguardo alla possibilità di usare una RecyclerView con celle differenti riusciresti a farmi un esempio? Come fai a creare diversi layout quando nella onCreateViewHolder() viene fatto l'inflate di un solo layout?

Dal RecyclerView + GridLayoutManager si riesce ad estrapolare quale riga/colonna dell'item che viene selezionato?  ???

Offline iClaude

  • Utente normale
  • ***
  • Post: 311
  • Respect: +25
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S8
  • Sistema operativo:
    Windows 10
Re:GridView vs RecyclerView + GridLayoutManager
« Risposta #5 il: 31 Maggio 2017, 14:35:15 CEST »
0
Riguardo alla possibilità di usare una RecyclerView con celle differenti riusciresti a farmi un esempio? Come fai a creare diversi layout quando nella onCreateViewHolder() viene fatto l'inflate di un solo layout?

Va implementato il metodo getItemViewType che, data la posizione di un elemento,  restituisce l'id del layout da utilizzare. Questo id è passato come secondo parametro del metodo onCreateViewHolder, dove si fa l'inflating del layout e lo si passa al ViewHolder corrispondente:
https://guides.codepath.com/android/Heterogenous-Layouts-inside-RecyclerView

Oppure puoi anche utilizzare un solo ViewHolder contenente gli stessi widget ma con diversi layout che li dispongono in modo diverso.

Offline wlf

  • Utente normale
  • ***
  • Post: 367
  • Respect: +8
    • Mostra profilo
  • Dispositivo Android:
    Xperia
Re:GridView vs RecyclerView + GridLayoutManager
« Risposta #6 il: 31 Maggio 2017, 15:35:25 CEST »
0
Mi sfugge come faccia a coesistere con lo stesso RecyclerView sia un GridLayoutManager che definisce che ci sono n celle per riga e casomai una cella con un Layout diverso che occupa tutta una riga ... a mio avviso entrerebbero in contraddizione.

Nell'esempio che hai postato ci sono delle semplici righe con delle foto, ma sempre di semplici righe si tratta:

 

Io vorrei che con una griglia simile a quella sottostante quando clicco su una foto mi vengano sotto i comandi (condividi, cancella, rinomina, sposta, etc) con una serie di bottoni:




Offline iClaude

  • Utente normale
  • ***
  • Post: 311
  • Respect: +25
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S8
  • Sistema operativo:
    Windows 10
Re:GridView vs RecyclerView + GridLayoutManager
« Risposta #7 il: 31 Maggio 2017, 17:02:44 CEST »
+1
Mi sfugge come faccia a coesistere con lo stesso RecyclerView sia un GridLayoutManager che definisce che ci sono n celle per riga e casomai una cella con un Layout diverso che occupa tutta una riga ... a mio avviso entrerebbero in contraddizione.

Nell'esempio che hai postato ci sono delle semplici righe con delle foto, ma sempre di semplici righe si tratta:

 

Io vorrei che con una griglia simile a quella sottostante quando clicco su una foto mi vengano sotto i comandi (condividi, cancella, rinomina, sposta, etc) con una serie di bottoni:



Per avere celle che occupano più colonne va usato il metodo setSpanSizeLookup, es:
Codice (Java): [Seleziona]
mRecylerView = (RecyclerView) view.findViewById(R.id.grid);
mLayoutManager = new GridLayoutManager(this, 2); // 2 colonne
mLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
        @Override
        public int getSpanSize(int position) {
                // qua data la posizione restituisco il numero di colonne dello span (1 x 1 colonna)
                // posso anche sfruttare mAdapter.getItemViewType(position) per capire che
                // layout è e in base a questo scegliere lo span
        }
});

Cmq nel tuo caso le celle sono tutte uguali.
Io proverei creando un layout con i bottoni sotto invisibili, poi quando ci clicchi su li visualizzi.

Vedi anche:
https://youtu.be/Cfb3RAyQg4w?t=18m34s
« Ultima modifica: 31 Maggio 2017, 17:10:05 CEST da iClaude »

Offline wlf

  • Utente normale
  • ***
  • Post: 367
  • Respect: +8
    • Mostra profilo
  • Dispositivo Android:
    Xperia
Re:GridView vs RecyclerView + GridLayoutManager
« Risposta #8 il: 01 Giugno 2017, 12:10:49 CEST »
0
Cmq nel tuo caso le celle sono tutte uguali.

Io proverei creando un layout con i bottoni sotto invisibili, poi quando ci clicchi su li visualizzi.

Non proprio ...
Codice: [Seleziona]
  -------------
  | 1 | 2 | 3 |
  |   |   |   |
  ------^------
  |b1  b2  b3  b4  b5  b6 |
  |                       |
  -------------
  | 4 |       |
  |   |       |
  --^----------
  |b1  b2  b3  b4  b5  b6 |
  |                       |
  -------------

Le celle, quelle divise a 3, normalmente sono da 1 a 5 immagini, difficilmente si andrà oltre. Tappando ad esempio sulla seconda immagine deve apparire sotto una serie di bottoni, che sono oltre a 3. Sarebbe ottimo che la riga sotto coi bottoni che compare abbia anche un indicatore, nell'esempio ho messo "^", che faccia capire quale immagine sto gestendo. Sarebbe utile che solo la cella di comandi sottostante comparsa sia scrollabile sinistra/destra, in modo che posso aggiungere n comandi, quindi addirittura questo dovrebbe essere un RecyclerView dentro ad una cella di un RecyclerView. :(

Ma la parte che mi lascia più perplesso è se non ci sono 3 immagini o un multiplo; la cella di comandi mi verrebbe visualizzata comunque sotto oppure cercherà di metterla a fianco?  ???

Altrimenti più semplicemente, con un CoordinatorLayout contenente un CollapsingToolbarLayout è  possibile racchiudere una GridView inserita nel content_main in un Layout compatibile in modo che se swipo verso l'altro mi collassa la Toolbar?
Perché con la GridView riuscirei a gestirmi il layout descritto, ma con questo non mi collassa la Toolbar! :(




« Ultima modifica: 01 Giugno 2017, 12:18:30 CEST da wlf »

Offline iClaude

  • Utente normale
  • ***
  • Post: 311
  • Respect: +25
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S8
  • Sistema operativo:
    Windows 10
Re:GridView vs RecyclerView + GridLayoutManager
« Risposta #9 il: 01 Giugno 2017, 14:55:36 CEST »
+1
Ok, ma qua allora non c'entrano le celle che si estendono su più colonne.

Sinceramente non credo abbia molto senso tentare di ricreare su Android lo stesso layout di iOS:
1) perché sono sistemi diversi e ciò che su uno è supportato di default sull'altro non lo è e quindi devi crearlo da zero
2) perché l'utente non ha più un'esperienza coerente tra le varie app
https://developer.android.com/design/patterns/pure-android.html

In Android hai vari sistemi per fare ciò che vuoi fare: menu popup, bottom sheet, action mode, che sono più coerenti con lo stile di Android e che hanno la stessa identica funzionalità.


Offline wlf

  • Utente normale
  • ***
  • Post: 367
  • Respect: +8
    • Mostra profilo
  • Dispositivo Android:
    Xperia
Re:GridView vs RecyclerView + GridLayoutManager
« Risposta #10 il: 01 Giugno 2017, 15:58:11 CEST »
0
Grazie al tuo suggerimento sono già riuscito a realizzarlo in buona parte ... ;)

Hai completamente ragione, ricreare su Android comportamenti iOS è un lavoraccio e vai fuori standard.

Il menuPopUp lo boccio in pieno, è orrendo, bruttino anche l'actionMode. Il bottom sheet, col senno di poi, sarebbe stata un ottima soluzione. :D
« Ultima modifica: 01 Giugno 2017, 16:08:39 CEST da wlf »