码迷,mamicode.com
首页 > 其他好文 > 详细

RecyclerView

时间:2015-01-29 14:07:02      阅读:219      评论:0      收藏:0      [点我收藏+]

标签:

        RecyclerView是Google于5.0后新推出的控件,用于替代ListView,在ListView中convertView是复用的,而在RecyclerView中,是缓存的ViewHolder对象,所以在RecyclerView中有一个onCreateViewHolder方法,将itemView传递给每个创建的ViewHolder,在ViewHolder中获取itemView上的每个View并作为其成员。通过onBindViewHolder中viewHolder得到要操作的view。

 

通过recyclerView.setLayoutManager()来设置要显示的列表类型,现在有三种:

1. LinearbyLayoutManager

2. GridLayoutManager

3. StaggeredGridLayoutManager  瀑布流

 

recyclerView.setHasFixedSize(true); 设置每个Item高度一致,可提高性能

 

recyclerView的Adapter需继承RecyclerView.Adapter,实现 onCreateViewHolder、onBindViewHolder和getItemCount方法。

并创建ViewHolder 继承 RecyclerView.ViewHolder,将其作为泛型类型传递给RecyclerView.Adapter的<>中。

 

onCreateViewHolder 获取ItemView,创建ViewHolder时作为参数传递出去。

技术分享
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item, parent, false);

        view.setOnClickListener(this);
        return new ViewHolder(view);
    }
View Code

 

ViewHolder得到itemView后,获取其子控件,作为成员属性。外部通过viewHolder得到itemView下所有控件再做操作。

技术分享
public static class ViewHolder extends RecyclerView.ViewHolder{

        private TextView mTextView;
        public ViewHolder(View v){
            super(v);
            mTextView = (TextView)v.findViewById(R.id.item_tv);

            if (flag){
                mTextView.setHeight(200);
            }else{
                mTextView.setHeight(280);
            }
            flag=!flag;
        }

        public TextView getmTextView() {
            return mTextView;
        }
    }
View Code

 

onBindViewHolder 获取到viewHolder,对其内部view填充数据等操作。

技术分享
public void onBindViewHolder(ViewHolder holder, int position) {
        holder.getmTextView().setText(dataset.get(position));
        holder.getmTextView().setTag(dataset.get(position));
    }
View Code

 

关于RecyclerView的点击事件处理:

自定义一个点击事件处理的接口,定义其实现的方法传递两个参数(view, data)。向外部暴露一个set方法用于传递这个接口的实现,在viewHolder或者onCreateViewHolder将设置itemView的onClick事件,将事件的处理交给从外部传递过来的自定义的点击事件。

 

添加数据:adapter.notifyItemInsered();

删除数据:adapter.notifyItemRemove();

 

RecyclerView

标签:

原文地址:http://www.cnblogs.com/timtanghh/p/4259428.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!