学习RecyclerView的一些东西
2015-06-15 20:39
351 查看
感觉5.0以后RecyclerView基本上能完成替代listView,gridview之类的了。
必须设置布局管理,以及RecyclerView.adapter才可以正常显示。
GridView网格类型布局:
可以设置增加item删除item的动画效果
需要注意:使用RecyclerView的item之间没有分割线,需要实现ItemDecoration
Adapter继承RecyclerView.adapter
使用onBindViewHolder方法来绑定数据。
OnCreateViewHolder方法来创建生成布局。
实现瀑布流时使用:
注意RecyclerView不支持item的点击事件,需要自己在adapter里设置点击监听事件。
若在activity里实现监听事件时,由于动态增加的item的没有使用notifyChanged()来刷新整个布局,会导致从监听中穿过来得position有误,使用getChildPosition()会更好。
[/code]
必须设置布局管理,以及RecyclerView.adapter才可以正常显示。
<span style="font-size:18px;">LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false); mRecyclerView.setLayoutManager(linearLayoutManager);</span>
GridView网格类型布局:
<span style="font-size:18px;">mRecyclerView.setLayoutManager(new GridLayoutManager(this, 3));</span>横向网格布局
mRecyclerView.setLayoutManager(new StaggeredGridLayoutManager(5, StaggeredGridLayoutManager.HORIZONTAL));
可以设置增加item删除item的动画效果
// 设置动画效果 mRecyclerView.setItemAnimator(new DefaultItemAnimator());自己自定义实现ItemAnimator效果更好
需要注意:使用RecyclerView的item之间没有分割线,需要实现ItemDecoration
// 设置分割线 DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(this, DividerItemDecoration.VERTICAL_LIST); mRecyclerView.addItemDecoration(dividerItemDecoration);或者直接在Item的布局上使用margin来用背景色充当分割线。
Adapter继承RecyclerView.adapter
public class SimpleAdapter extends RecyclerView.Adapter<MyViewHolder> { private Context mContext; private LayoutInflater mInflater; private List<String> mDataList; public SimpleAdapter(Context context, List<String> list) { mContext = context; mDataList = list; mInflater = LayoutInflater.from(context); } public void addData(int position) { mDataList.add("insert"); notifyItemInserted(position); } public void deleteData(int position) { mDataList.remove(position); notifyItemRemoved(position); } @Override public MyViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { View view = mInflater.inflate(R.layout.item_view, viewGroup, false); MyViewHolder holder = new MyViewHolder(view); return holder; } @Override public void onBindViewHolder(MyViewHolder myViewHolder, int i) { myViewHolder.text.setText(mDataList.get(i)); } @Override public int getItemCount() { return mDataList.size(); } } class MyViewHolder extends RecyclerView.ViewHolder { public TextView text; public MyViewHolder(View itemView) { super(itemView); text = (TextView) itemView.findViewById(R.id.textview); } }注意要使用ViewHolder。
使用onBindViewHolder方法来绑定数据。
OnCreateViewHolder方法来创建生成布局。
实现瀑布流时使用:
// 设置布局管理 StaggeredGridLayoutManager staggeredGridLayoutManager = new StaggeredGridLayoutManager(3, StaggeredGridLayoutManager.VERTICAL); mRecyclerView.setLayoutManager(staggeredGridLayoutManager);需要使item的高度相互之间有差值。
注意RecyclerView不支持item的点击事件,需要自己在adapter里设置点击监听事件。
若在activity里实现监听事件时,由于动态增加的item的没有使用notifyChanged()来刷新整个布局,会导致从监听中穿过来得position有误,使用getChildPosition()会更好。
[/code]
相关文章推荐
- 【性能诊断】六、并发场景的性能分析(windbg案例,大量的内部异常造成CPU飙升)
- aam中的训练过程
- iOS动画:UIView动画和CALayer动画(CABasicAnimation、CAKeyframeAnimation的使用)
- oracle中rowid的用法 (全面)
- hadoop学习笔记:hadoop文件系统浅析
- “重力锁屏”软件简介
- Ibatis SqlMapclient对象
- Android的五大基本组件
- PagerSlidingTabStrip
- EntityFramework6 连接mysql数据库(code first模式)
- 使用Ghost备份/恢复操作系统
- python模块学习 hashlib
- 计算几何中的精度问题(转)
- Environment
- centos php环境搭建
- ViewPagerIndicator
- [转载]网络原理,以及对VM虚拟网络VMnet0、VMnet1、VMnet8的图解
- 一步一步写正则 1:金额正则表达式
- 线程模型
- 以Windows服务方式启动MySQL,并将其默认编码设置为UTF-8