Android App开发中使用RecyclerView实现Gallery画廊的实例

2019-12-10 18:27:32于海丽

使用起来也很方便,唯一的区别就是要设置LayoutManager,目前只有一个实现类,就是LinearLayoutManager,可以设置为水平或者垂直。
最后效果图:

Android,App开发,RecyclerView,Gallery

效果很不错,这就是RecyclerView的基本用法了,但是你会发现一个坑爹的地方,竟然没有提供setOnItemClickListener这个回调,要不要这么坑爹。。。
2、为RecyclerView添加OnItemClickListener回调
虽然它没有提供,但是添加个OnItemClickListener对我们来说还不是小菜一碟~
我决定在Adapter中添加这个回调接口:

package com.example.zhy_horizontalscrollview03; 
 
import java.util.List; 
 
import android.content.Context; 
import android.support.v7.widget.RecyclerView; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.view.ViewGroup; 
import android.widget.ImageView; 
import android.widget.TextView; 
 
public class GalleryAdapter extends 
    RecyclerView.Adapter<GalleryAdapter.ViewHolder> 
{ 
 
  /** 
   * ItemClick的回调接口 
   * @author zhy 
   * 
   */ 
  public interface OnItemClickLitener 
  { 
    void onItemClick(View view, int position); 
  } 
 
  private OnItemClickLitener mOnItemClickLitener; 
 
  public void setOnItemClickLitener(OnItemClickLitener mOnItemClickLitener) 
  { 
    this.mOnItemClickLitener = mOnItemClickLitener; 
  } 
 
  private LayoutInflater mInflater; 
  private List<Integer> mDatas; 
 
  public GalleryAdapter(Context context, List<Integer> datats) 
  { 
    mInflater = LayoutInflater.from(context); 
    mDatas = datats; 
  } 
 
  public static class ViewHolder extends RecyclerView.ViewHolder 
  { 
    public ViewHolder(View arg0) 
    { 
      super(arg0); 
    } 
 
    ImageView mImg; 
    TextView mTxt; 
  } 
 
  @Override 
  public int getItemCount() 
  { 
    return mDatas.size(); 
  } 
 
  @Override 
  public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) 
  { 
    View view = mInflater.inflate(R.layout.activity_index_gallery_item, 
        viewGroup, false); 
    ViewHolder viewHolder = new ViewHolder(view); 
 
    viewHolder.mImg = (ImageView) view 
        .findViewById(R.id.id_index_gallery_item_image); 
    return viewHolder; 
  } 
 
  @Override 
  public void onBindViewHolder(final ViewHolder viewHolder, final int i) 
  { 
    viewHolder.mImg.setImageResource(mDatas.get(i)); 
 
    //如果设置了回调,则设置点击事件 
    if (mOnItemClickLitener != null) 
    { 
      viewHolder.itemView.setOnClickListener(new OnClickListener() 
      { 
        @Override 
        public void onClick(View v) 
        { 
          mOnItemClickLitener.onItemClick(viewHolder.itemView, i); 
        } 
      }); 
 
    } 
 
  } 
 
}