Autore Topic: Recyclerview e Picasso  (Letto 278 volte)

Offline tonno16

  • Utente storico
  • *****
  • Post: 1185
  • Respect: +57
    • Mostra profilo
  • Dispositivo Android:
    moto g
  • Play Store ID:
    Diego Tonini
  • Sistema operativo:
    OpenSuse
Recyclerview e Picasso
« il: 10 Novembre 2015, 19:07:21 CET »
0
Salve. Volevo realizzare una lista del tipo: http://i.stack.imgur.com/pVGKW.png
Ho scoperto la libreria https://github.com/lucasr/twoway-view/.

Qualcuno l'ha usata? Do per scontato che non userò la listview come alternativa.
Ho implementato il tutto come nei sample. Effettivamente funziona benissimo. Non ho capito come giocarmela con righe e colonne ma una cosa accettabile l'ho ottenuta.
Se comincio a mettere delle immagini caricate da locale, continua a funzionare bene.
Se inizio a mettere caricamenti con picasso nel metodo sottostante, come giusto che sia
Codice (Java): [Seleziona]
@Override
    public void onBindViewHolder(SimpleViewHolder holder, int position) {
        holder.title.setText(mItems.get(position).toString());

        boolean isVertical = (mRecyclerView.getOrientation() == TwoWayLayoutManager.Orientation.VERTICAL);
        final View itemView = holder.itemView;

        final int itemId = mItems.get(position);

        if (mLayoutId == R.layout.layout_staggered_grid) {
            final int dimenId;
            if (itemId % 3 == 0) {
                dimenId = R.dimen.staggered_child_medium;
            } else if (itemId % 5 == 0) {
                dimenId = R.dimen.staggered_child_large;
            } else if (itemId % 7 == 0) {
                dimenId = R.dimen.staggered_child_xlarge;
            } else {
                dimenId = R.dimen.staggered_child_small;
            }

            final int span;
            if (itemId == 2) {
                span = 2;
            } else {
                span = 1;
            }

            final int size = mContext.getResources().getDimensionPixelSize(dimenId);

            final StaggeredGridLayoutManager.LayoutParams lp =
                    (StaggeredGridLayoutManager.LayoutParams) itemView.getLayoutParams();

            if (!isVertical) {
                lp.span = span;
                lp.width = size;
                itemView.setLayoutParams(lp);
            } else {
                lp.span = span;
                lp.height = size;
                itemView.setLayoutParams(lp);
            }
        } else if (mLayoutId == R.layout.layout_spannable_grid) {
            final SpannableGridLayoutManager.LayoutParams lp =
                    (SpannableGridLayoutManager.LayoutParams) itemView.getLayoutParams();

            final int span1 = (itemId == 0 || itemId == 3 ? 2 : 1);
            final int span2 = (itemId == 0 ? 2 : (itemId == 3 ? 3 : 1));

            final int colSpan = (isVertical ? span2 : span1);
            final int rowSpan = (isVertical ? span1 : span2);

            if (lp.rowSpan != rowSpan || lp.colSpan != colSpan) {
                lp.rowSpan = rowSpan;
                lp.colSpan = colSpan;
                itemView.setLayoutParams(lp);
            }
        }
    }

Inizializzo quindi un ImageView (rimuovo la textView di esempio), e ci piazzo un immagine caricata tramite url con Picasso, il tutto funziona a casaccio.
I dp o pixel che siano non vengono mai rispettati (e non sono cretino). Per esempio un immagine forzata ad una dimensione enorme si modella da sola come se io non avessi apportato modifiche.
Il problema principale è che scrollando su e giu la lista, una volta tornato su, Picasso fa qualche cavolata e mi si creano costantemente centimetri di spazio bianco sopra il mio layout.
Dopo 2 scrool lo schermo diventa quindi del tutto bianco.

Ora, picasso è strausato, e io non ho trovato niente che abbia a che fare col mio errore. Non saprei dove mettere le mani.

Offline GabMarioPower

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 606
  • Respect: +152
    • Github
    • Google+
    • gabrielemariotti
    • GabMarioPower
    • Mostra profilo
  • Play Store ID:
    GAB+MARIO+DEV
  • Sistema operativo:
    Ubuntu 14.04 , Win 10
Re:Recyclerview e Picasso
« Risposta #1 il: 12 Novembre 2015, 07:00:47 CET »
0
L'errore potrebbe anche dipendere dalla libreria.

Una Spannable Grid la puoi comunque ottenere anche con la RecyclerView ufficiale.
Devi usare un GridLayoutManager e poi implementare questo metodo:

Codice (Java): [Seleziona]
manager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
  @Override
  public int getSpanSize(int position) {
     // return  qui indichi la span size in base alla posizione
  }
});

Offline tonno16

  • Utente storico
  • *****
  • Post: 1185
  • Respect: +57
    • Mostra profilo
  • Dispositivo Android:
    moto g
  • Play Store ID:
    Diego Tonini
  • Sistema operativo:
    OpenSuse
Re:Recyclerview e Picasso
« Risposta #2 il: 12 Novembre 2015, 08:20:12 CET »
0
Ammetto che non sono bravo come te.ho provato svariate librerie per le staggered gridview etc. Ognuna ha i suoi problemi. Alcune impazziscono alla rotazione dello schermo. Altre si comportano bene alla rotazione ma durante lo scroll generano layout errati.
Sono arrivato alla conclusione che una normalissima greedview con un normalissimo adapter (senza alcuna libreria) funziona ancora perfettamente nonostante l'esistenza delle recicleview.

Grazie della risposta...sperimento comunque per vedere