2016-07-31 25 views
0

我有什麼讓RecyclerView項目爲一個網格 - Android電子

我現在有一個RecyclerView加載一些圖片,其結果是這樣的,

Normal RecyclerView

我想要

但是,我想圖像堆積在RecyclerView像這樣,

Grid RecyclerView

目前代碼

這是我目前RecyclerView項目佈局

<?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> 

,這是我的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 adpater 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); 

我該如何達到預期效果?

+4

您需要'GridLayoutManager'。 – EpicPandaForce

+0

看看你如何聲明和設置RecyclerView將會很有用。截圖和適配器是很好的補充,雖然 –

+0

@ cricket_007我添加了'RecyclerView'和@EpicPandaForce的初始化我猜你指的是我在哪裏用戶'RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getApplicationContext());'?我應該使用'GridLayoutManger'? –

回答

2

在這種情況下,在您的recyclerView啓動時,您應該使用GridLayoutManager作爲recyclerView的LayoutManager。

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

gridLayoutManager的構造函數中的'3'是你在一行中的項目數。

相關問題