2016-07-31 26 views
0

Was ich habeRecyclerView Elemente in einem Raster - Android

Moment habe ich eine RecyclerView die eine Reihe von Bildern lädt und die Ergebnisse sehen wie folgt aus,

Normal RecyclerView

Was ich wollen

Allerdings möchte ich die Bilder in der RecyclerView wie diese stapeln,

Grid RecyclerView

aktuelle Code

Dies ist mein aktuelles RecyclerView Artikel Layout

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" android:layout_width="match_parent" 
    android:layout_height="wrap_content"> 

    <ImageView 
     android:id="@+id/image" 
     android:layout_width="60dp" 
     android:layout_height="60dp" 
     android:src="@drawable/art" 
     android:layout_gravity="center" 
     android:layout_marginTop="16dp"/> 
</LinearLayout> 

Und das ist mein Adpater für die RecyclerView

public class ImageAdapter extends RecyclerView.Adapter<ImageAdapter.MyViewHolder> { 

    private ArrayList<String> images; 
    private AdapterCallback mAdapterCallback; 

    public class MyViewHolder extends RecyclerView.ViewHolder { 
     public ImageView image; 

     public MyViewHolder(View view) { 
      super(view); 
      image = (ImageView) view.findViewById(R.id.image); 
     } 
    } 

    public ImageAdapter(ArrayList<String> images, Context context) { 
     this.images = images; 
     try { 
      this.mAdapterCallback = ((AdapterCallback) context); 
     } catch (ClassCastException e) { 
      throw new ClassCastException("Activity must implement AdapterCallback."); 
     } 
    } 

    @Override 
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View itemView = LayoutInflater.from(parent.getContext()) 
       .inflate(R.layout.image, parent, false); 

     return new MyViewHolder(itemView); 
    } 

    @Override 
    public void onBindViewHolder(MyViewHolder holder, int position) { 
     final String imageText = images.get(position); 
     holder.image.setImageResource(R.drawable.art); 
     holder.image.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       try { 
        mAdapterCallback.imageSelected(imageText); 
       } catch (ClassCastException exception) { 
       } 
      } 
     }); 
    } 

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

    public static interface AdapterCallback { 
     void imageSelected(String imageText); 
    } 
} 

Initializi ng RecyclerView

recyclerView = (RecyclerView) imagesDialog.findViewById(R.id.recycler_view); 
RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getApplicationContext()); 
recyclerView.setLayoutManager(mLayoutManager); 
recyclerView.setItemAnimator(new DefaultItemAnimator()); 
ImageAdapter mAdapter = new ImageAdapter(images, this); 
recyclerView.setAdapter(mAdapter); 

Wie kann ich den gewünschten Effekt erzielen?

+4

Sie benötigen einen 'GridLayoutManager'. – EpicPandaForce

+0

Es wäre nützlich zu sehen, wie Sie RecyclerView deklariert und eingerichtet haben. Screenshots und der Adapter sind nette Ergänzungen, obwohl –

+0

@ cricket_007 Ich habe die Initialisierung der 'RecyclerView' und @EpicPandaForce Ich denke, Sie beziehen sich auf, wo ich Benutzer' RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager (getApplicationContext()); '? Ich sollte 'GridLayoutManger' verwenden? –

Antwort

2

In diesem Fall sollten Sie bei der Initiierung recyclerView GridLayoutManager als LayoutManager des RecyclerViews verwenden.

RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recyclerView); 
recyclerView.setLayoutManager(new GridLayoutManager(context, 3)); 

Die '3' im Konstruktor des GridLayoutManager ist die Anzahl der Elemente, die Sie in einer Zeile haben werden.