Android RecyclerView

参考网址http://blog.csdn.net/skykingf/article/details/50827141

①RecylerView封装了viewholder的回收复用,也就是说RecylerView标准化了ViewHolder,编写Adapter面向的是ViewHolder而不再是View了,复用的 逻辑被封装了,写起来更加简单。
②提供了一种插拔式的体验,高度的解耦,异常的灵活,针对一个Item的显示RecylerView专门抽取出了相应的类,来控制Item的显示,使其的扩展性非常强。例如:你想控制横向或者纵向滑动列表效果可以通过LinearLayoutManager这个类来进行控制(与GridView效果对应的是GridLayoutManager,与瀑布流对应的还有StaggeredGridLayoutManager等),也就是说RecylerView不再拘泥于ListView的线性展示方式,它也可以实现GridView的效果等多种效果。你想控制Item的分隔线,可以通过继承RecylerView的ItemDecoration这个类,然后针对自己的业务需求去抒写代码。
③可以控制Item增删的动画,可以通过ItemAnimator这个类进行控制,当然针对增删的动画,RecylerView有其自己默认的实现。

recyclerView = (RecyclerView) findViewById(R.id.recyclerView);  
LinearLayoutManager layoutManager = new LinearLayoutManager(this );  
//设置布局管理器  
recyclerView.setLayoutManager(layoutManager);  
//设置为垂直布局,这也是默认的  
layoutManager.setOrientation(OrientationHelper. VERTICAL);  
//设置Adapter  
//recyclerView.setAdapter( recycleAdapter);  
//适配器
recyclerView.setAdapter(new MyRecyclerAdapter(this, mDatas));
//设置分隔线  
recyclerView.addItemDecoration( new DividerGridItemDecoration(this ));  
//设置增加或删除条目的动画  
recyclerView.setItemAnimator( new DefaultItemAnimator());  

RecyclerView.Adapter,需要实现3个方法:
①onCreateViewHolder()
这个方法主要生成为每个Item inflater出一个View,但是该方法返回的是一个ViewHolder。该方法把View直接封装在ViewHolder中,然后我们面向的是ViewHolder这个实例,当然这个ViewHolder需要我们自己去编写。直接省去了当初的convertView.setTag(holder)和convertView.getTag()这些繁琐的步骤。
②onBindViewHolder()
这个方法主要用于适配渲染数据到View中。方法提供给你了一个viewHolder,而不是原来的convertView。
③getItemCount()
这个方法就类似于BaseAdapter的getCount方法了,即总共有多少个条目。

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

    private List<String> mDatas;
    private Context mContext;
    private LayoutInflater inflater;

    public MyRecyclerAdapter(Context context, List<String> datas){
        this. mContext=context;
        this. mDatas=datas;
        inflater=LayoutInflater. from(mContext);
    }

    @Override
    public int getItemCount() {

        return mDatas.size();
    }

    //填充onCreateViewHolder方法返回的holder中的控件
    @Override
    public void onBindViewHolder(MyViewHolder holder, final int position) {

        holder.tv.setText( mDatas.get(position));
    }

    //重写onCreateViewHolder方法,返回一个自定义的ViewHolder
    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

        View view = inflater.inflate(R.layout.item_home,parent, false);
        MyViewHolder holder= new MyViewHolder(view);
        return holder;
    }

    class MyViewHolder extends RecyclerView.ViewHolder {
        TextView tv;
        public MyViewHolder(View view) {
            super(view);
            tv=(TextView) view.findViewById(R.id.tv_item);
        }
    }
}

recycleView布局
①LinearLayoutManager即线性布局,这个是在上面的例子中我们用到的布局
②GridLayoutManager即表格布局

mRecyclerView.setLayoutManager(new GridLayoutManager(this,4));

③StaggeredGridLayoutManager即流式布局,如瀑布流效果

mRecyclerView.setLayoutManager(new StaggeredGridLayoutManager(4,         StaggeredGridLayoutManager.HORIZONTAL));
mRecyclerView.setLayoutManager(new StaggeredGridLayoutManager(4, SggeredGridLayoutManager.VERTICAL));

参考网址http://blog.csdn.net/skykingf/article/details/50827141

点击事件实现
1,点击事件接口

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

2,MyViewHolder实现接口

class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
    TextView tv;
    OnItemClickListener onItemClickListener;

    public MyViewHolder(View view, OnItemClickListener onItemClickListener) {
        super(view);
        this.onItemClickListener = onItemClickListener;
        tv=(TextView) view.findViewById(R.id.tv_item);
        view.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        if (onItemClickListener!=null) {
            onItemClickListener.onItemClick(v, getAdapterPosition());
        }
    }
}

3,MyRecyclerAdapter传入onItemClickListener给MyViewHolder

//重写onCreateViewHolder方法,返回一个自定义的ViewHolder
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

    View view = inflater.inflate(R.layout.item_home,parent, false);
    MyViewHolder holder= new MyViewHolder(view, mOnItemClickListener);
    return holder;
}
public void setOnItemClickListener(OnItemClickListener onItemClickListener ){
    this. mOnItemClickListener=onItemClickListener;
}

4, Activity实现点击事件

@Override
public void onItemClick(View view, int position) {
    Toast.makeText(getActivity(), position+"", Toast.LENGTH_SHORT).show();
}

参考网址http://blog.csdn.net/guxiao1201/article/details/40423361

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值