RecycleView的实现步骤

#主要API
    LayoutManager:布局管理器(LinearLayoutManager 、GridLayoutManager、StaggeredGridLayoutManager)
    
    ItemDecoration:绘制Item间的间隔
    
    ItemAnimator:Item增删的动画

#使用步骤
1.build.gradle中添加
      compile'com.android.support:recyclerview-v7:23.1.1'  

2.布局内添加

    <android.support.v7.widget.RecyclerView  
           android:id="@+id/recyclerView"  
           android:layout_width="match_parent"  
           android:layout_height="match_parent" 
           ></android.support.v7.widget.RecyclerView> 

3.代码中初始化并设置

    RecyclerView recycleView = findView(R.id.recyclerview);

设置布局管理器

    LinearLayoutManager linearLayoutManager=new LinearLayoutManager(this);//线性
    
    GridLayoutManager gridLayoutManager=new GridLayoutManager(this,4);//网格
    
    StaggeredGridLayoutManager staggeredGridLayoutManager=new       StaggeredGridLayoutManager(4,StaggeredGridLayoutManager.VERTICAL);//流式

设置布局管理器的方向

        linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
        linearLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);

设置

    recyclerView.setLayoutManager(layout);
    recyclerView.setAdapter(adapter);
    recyclerView.addItemDecoration(new DividerGridItemDecoration(this));//添加分割线,继承RecyclerView.ItemDecoration
    recyclerView.setItemAnimator(new DefaultItemAnimator());//设置默认Item增删动画

#Adapter的实现

1.自定义类继承RecycleView的Adapter同时绑定ViewHolder

    class MyAdapter extends RecyclerView.Adapter<MyViewHolder>


2.实现方法

        @Override
        public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            LayoutInflater mInflater = LayoutInflater.from(context);
            MyViewHolder holder = new MyViewHolder(mInflater.inflate(
                R.layout.item_home, parent, false));
            return holder;
        }

        @Override
        public void onBindViewHolder(MyViewHolder holder, int position) {
            holder.tv.setText(mDatas.get(position));
        }

        @Override
        public int getItemCount() {
            return mDatas.size();
        }
3.MyViewHolder

    class MyViewHolder extends RecyclerView.ViewHolder {

        TextView tv;

        public MyViewHolder(View view) {
            super(view);
            tv = (TextView) view.findViewById(R.id.id_num);
        }
    }

#增删Item的动画
        mDatas.add(position, "Insert One");
        notifyItemInserted(position);//增加
        mDatas.remove(position);
        notifyItemRemoved(position);//删除

#设置点击监听

首先对MyAdapter.java代码做出如下修改
①新建两个内部接口:

    public interface OnItemClickListener{
        void onItemClick(View view,int position);
    }

    public interface OnItemLongClickListener{
        void onItemLongClick(View view,int position);
    }

②新建两个私有变量用于保存用户设置的监听器及其set方法:

    private OnItemClickListener mOnItemClickListener;
    private OnItemLongClickListener mOnItemLongClickListener;

    public void setOnItemClickListener(OnItemClickListener mOnItemClickListener){
        this.mOnItemClickListener = mOnItemClickListener;
    }

    public void setOnItemLongClickListener(OnItemLongClickListener mOnItemLongClickListener) {
        this.mOnItemLongClickListener = mOnItemLongClickListener;
    }

③在onBindViewHolder方法内,实现回调:

@Override
public void onBindViewHolder(final ViewHolder holder, int position) {
    holder.mTextView.setText(mDataSet.get(position));
    //判断是否设置了监听器
    if(mOnItemClickListener != null){
        //为ItemView设置监听器
        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                int position = holder.getLayoutPosition(); // 1
                mOnItemClickListener.onItemClick(holder.itemView,position); // 2
            }
        });
    }
    if(mOnItemLongClickListener != null){
        holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {
                int position = holder.getLayoutPosition();
                mOnItemLongClickListener.onItemLongClick(holder.itemView,position);
                //返回true 表示消耗了事件 事件不会继续传递
                return true;
            }
        });
    }
}

可以看到,这里实际上用到了子Item View的onClickListener和onLongClickListener这两个监听器,如果当前子item view被点击了,会触发点击事件进行回调,然后在①处获取当前点击位置的position值,接着在②号代码处进行再次回调,而这一次的回调是我们自己手动添加的,需要实现上面所述的接口。
修改完MyAdapter.java后,我们接着在MainActivity.java中设置监听器,采用匿名内部类的形式实现了onItemClickListener、onItemLongClickListener接口,这种写法与一般的设置监听器的流程相同:

mAdapter = new MyAdapter(mData);
mAdapter.setOnItemClickListener(new MyAdapter.OnItemClickListener() {
    @Override
    public void onItemClick(View view, int position) {
        Toast.makeText(MainActivity.this, "click " + mData.get(position), Toast.LENGTH_SHORT).show();
    }
});
mAdapter.setOnItemLongClickListener(new MyAdapter.OnItemLongClickListener() {
    @Override
    public void onItemLongClick(View view, int position) {
        Toast.makeText(MainActivity.this,"long click "+mData.get(position),Toast.LENGTH_SHORT).show();
    }
});
mRecyclerView.setAdapter(mAdapter);



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值