2015-06-30 12 views
18

Desidero un RecyclerView in cui abbiamo un elenco verticale di elementi scorrevoli. Da questo elenco scorrevole di elementi alcuni dovrebbero avere la possibilità di scorrere in direzione orizzontale. Come mostrato nell'immagine sottostante enter image description hereVista Recycler della lista a scorrimento verticale con riga scorrevole orizzontale

qualcuno può, per favore, guidarmi come si fa?

Grazie.

+0

Poiché non v'è alcun metodo per aggiungere piè di pagina al recyclerview ... è possibile creare un elemento con ScrollView orizzontale e gonfialo nell'adattatore per farlo apparire come un piè di pagina. – user765

risposta

5

LayoutManagers personalizzate

  • StaticGridLayoutManager - 2D a scorrimento griglia con colonna variabile di conteggio basata su set di dati. La finestra delle viste visibili (non riciclate) è
    determinata staticamente.
  • DynamicGridLayoutManager: griglia di scorrimento 2D in cui la finestra delle viste visibili viene determinata dinamicamente. Risultati in meno viste nella memoria , ma le prestazioni di scorrimento sono discutibili.

Ho incontrato lo stesso problema e ho trovato questa libreria. Forse ti aiuterà. https://github.com/devunwired/recyclerview-playground

Maggiori dettagli circa RecyclerView LayoutManager: http://wiresareobsolete.com/2014/09/building-a-recyclerview-layoutmanager-part-1/

p/s: Per il vostro caso http://lucasr.org/2014/07/31/the-new-twowayview/

+0

Il problema è che la vista bidirezionale di lucasr non ha esempi o tutorial ... Ma forse dovremmo andare avanti e provare da soli –

-1

Dal momento che questo sembra essere un problema comunemente chiesto, ho pensato io condividere la mia semplice implementazione di questo . È abbastanza facile da raggiungere questo utilizzando un RecyclerView. L'ho fatto mentre cercavo di creare un elenco orizzontale di immagini scorrevoli quando è stata scattata una foto utilizzando la fotocamera del dispositivo. Ho incollato la sezione pertinente dell'adattatore.

Ho utilizzato un RecyclerView che utilizzava un LinearLayoutManager con orientamento impostato su orizzontale.

L'adattatore in sé è abbastanza semplice ed è (si prega di notare solo le sezioni rilevanti sono qui):

import android.content.Context; 
import android.graphics.Bitmap; 
import android.media.Image; 
import android.support.v7.widget.RecyclerView; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ImageView; 

import com.ebay.lockers.R; 
import com.ebay.lockers.utils.AsyncDrawable; 
import com.ebay.lockers.utils.BitmapUtils; 
import com.ebay.lockers.utils.BitmapWorkerTask; 

import java.io.File; 
import java.util.List; 

/** 
* Created by Sunil on 6/17/2016. 
*/ 
public class ImagesHorizontalListAdapter extends RecyclerView.Adapter<ImagesHorizontalListAdapter.ImagesViewHolder> { 

    private Context context; 
    private List<File> imageFiles; 

    public ImagesHorizontalListAdapter(Context context, List<File> imageFiles) { 
     this.context = context; 
     this.imageFiles = imageFiles; 
    } 

    @Override 
    public ImagesHorizontalListAdapter.ImagesViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View layout = LayoutInflater.from(context).inflate(R.layout.simple_image_view, parent, false); 
     ImagesViewHolder viewHolder = new ImagesViewHolder(layout); 
     return viewHolder; 
    } 

    @Override 
    public void onBindViewHolder(final ImagesHorizontalListAdapter.ImagesViewHolder holder, final int position) { 
     int availableWidth = context.getResources().getDisplayMetrics().widthPixels; 
     int imageWidth = availableWidth/4; // Number of images to be shown by default 
     int imageHeight = imageWidth*4/3; 
     final int minDimenForScaling = Math.min(imageWidth, imageHeight); 

     holder.image.post(new Runnable() { 
      @Override 
      public void run() { 
       loadBitmap(imageFiles.get(position), holder.image, minDimenForScaling, minDimenForScaling); 
      } 
     }); 
    } 

    @Override 
    public int getItemCount() { 
     return imageFiles.size(); 
    } 

    public void loadBitmap(File file, ImageView imageView, int reqWidth, int reqHeight) { 
     if(BitmapUtils.cancelPotentialWork(file, imageView)) { 
      final BitmapWorkerTask task = new BitmapWorkerTask(imageView, reqWidth, reqHeight); 
      // The second Bitmap parameter is a placeholder image 
      // Should consider animation; TO DO -- 
      final AsyncDrawable asyncDrawable = new AsyncDrawable(context.getResources(), null, task); 
      imageView.setImageDrawable(asyncDrawable); 
      task.execute(file); 
     } 
    } 

    public static class ImagesViewHolder extends RecyclerView.ViewHolder { 
     // each data item is an image 
     ImageView image; 

     public ImagesViewHolder(View layout) { 
      super(layout); 
      this.image = (ImageView) layout.findViewById(R.id.image); 
     } 
    } 
} 
+0

Questo non risponde alla domanda posta da op –

+0

Gli fornisce una stampa blu per la soluzione. L'OP ha chiesto una guida che è esattamente quello che ho fatto. Si prega di analizzare la domanda in modo critico. – ucsunil

+0

L'operatore ha chiesto informazioni su una panoramica di riciclaggio che avrebbe contenuto elementi in verticale e di quelle voci alcune delle righe avrebbero più elementi come mostrato nell'immagine. La tua soluzione copre solo la prima parte che visualizza gli articoli in verticale o in orizzontale. Non copre ciò che ha chiesto. Per favore guarda di nuovo la domanda –

Problemi correlati