2015-06-30 8 views
18

Chcę wyświetlić widok z recyklingu, w którym mamy przewijaną listę przedmiotów w pionie. Z tej przewijanej listy przedmiotów niektóre powinny mieć możliwość przewijania w poziomie. Jak pokazano na poniższym zdjęciu: enter image description hereWidok recyklera pionowej przewijanej listy z poziomym przewijanym rzędem

Czy ktoś może mi doradzić, jak to zrobić?

Dziękuję.

+0

Ponieważ nie ma sposobu, aby dodać stopkę do recyclerview ... można utworzyć pozycję z poziomej Scrollview i nadmuchać go w adapterze, aby wyglądał jak stopka. – user765

Odpowiedz

5

niestandardowe LayoutManagers

  • StaticGridLayoutManager - 2D przewijania siatki ze zmienną liczba kolumn na podstawie zestawu danych. Okno widocznych widoków (nie poddanych recyklingowi) jest statycznie określane.
  • DynamicGridLayoutManager - Siatka przewijania 2D, w której okno widocznych widoków jest określane dynamicznie. Wyniki w mniejszej liczbie wyświetleń w pamięci , ale przewijanie wydajności jest wątpliwe.

Spotkałem ten sam problem i znalazłem tę bibliotekę. Może ci to pomoże. https://github.com/devunwired/recyclerview-playground

Więcej szczegółów na temat RecyclerView LayoutManager: http://wiresareobsolete.com/2014/09/building-a-recyclerview-layoutmanager-part-1/

p/s: W Twoim przypadku http://lucasr.org/2014/07/31/the-new-twowayview/

+0

Problem polega na tym, że widok dwukierunkowy od Lucka, nie ma przykładu ani samouczka ... Ale może powinniśmy kontynuować i próbować dla siebie –

-1

Ponieważ wydaje się być najczęściej zadawane problem, myślałem, będę dzielić moją prostą realizację tego . Dosyć łatwo jest to osiągnąć za pomocą narzędzia RecyclerView. Zrobiłem to, próbując utworzyć poziomą listę przewijanych obrazów, gdy zdjęcie zostało zrobione za pomocą kamery urządzenia. Wkleiłem odpowiednią sekcję adaptera.

Użyłem RecyclerView, który używał LinearLayoutManager z orientacją ustawioną na poziomą.

Sam adapter jest dość prosta i jest (uwaga tylko odpowiednie sekcje są tutaj):

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

To nie odpowiada na pytanie zadane przez op –

+0

Zapewnia mu niebieski wydruk dla rozwiązania. PO poprosił o poradnik, który właśnie zrobiłem. Proszę krytycznie przeanalizować pytanie. – ucsunil

+0

Op pytano o widok z recyklingu, który zawierałby elementy w pionie, a niektóre z tych wierszy miałyby wiele elementów, jak pokazano na obrazku. Twoje rozwiązanie obejmuje tylko pierwszą część, która wyświetla elementy w pionie lub poziomie. Nie obejmuje tego, o co prosił. Proszę ponownie zobaczyć to pytanie –