首页 > 代码库 > RecyclerView
RecyclerView
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); }
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; } }
onBindViewHolder 获取到viewHolder,对其内部view填充数据等操作。
public void onBindViewHolder(ViewHolder holder, int position) { holder.getmTextView().setText(dataset.get(position)); holder.getmTextView().setTag(dataset.get(position)); }
关于RecyclerView的点击事件处理:
自定义一个点击事件处理的接口,定义其实现的方法传递两个参数(view, data)。向外部暴露一个set方法用于传递这个接口的实现,在viewHolder或者onCreateViewHolder将设置itemView的onClick事件,将事件的处理交给从外部传递过来的自定义的点击事件。
添加数据:adapter.notifyItemInsered();
删除数据:adapter.notifyItemRemove();
RecyclerView