Android RecyclerView初探
2016-04-21 11:35
441 查看
原文:https://github.com/dyguests/RecyclerViewDemo
RecyclerView是用于替换ListView的解决方案,将视图控制和数据绑定做了分离,提供了强大的样式定制能力
注:
2.2.2.添加
注:这里用
也可以使用
注:
2.3.1.创建
2.3.2.让类继承
2.3.3.注意,
2.3.7.指定
2.3.9.实现
2.3.10.在
这里注意一下,请尽量把
注:这段代码是为了方便把数据增删和动画效果绑定要一起
GridLayoutManagerActivity
InContainerActivity
RecyclerView是用于替换ListView的解决方案,将视图控制和数据绑定做了分离,提供了强大的样式定制能力
使用教程
1.准备工作
在 module 的 build.gradle 中 加入compile 'com.android.support:recyclerview-v7:23.3.0'代码:
dependencies { ... compile 'com.android.support:recyclerview-v7:23.3.0'//1.1 ... }
2.使用RecyclerView
2.1.在xml中添加RecyclerView
activity_linear_layout_manager.xml<RelativeLayout ...> <android.support.v7.widget.RecyclerView android:id="@+id/recycler_view" android:layout_width="match_parent" android:layout_height="match_parent" tools:listitem="@layout/item_linear"/> </RelativeLayout>
注:
tools:listitem="@layout/item_linear"是用于在Android Studio的Preview中查看效果用的
2.2.在java中添加RecyclerView
LinearLayoutManagerActivity.java2.2.1.绑定
mRecyclerView = ((RecyclerView) findViewById(R.id.recycler_view));
2.2.2.添加LayoutManager
(布局方式)
mRecyclerView.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL/*方向*/, false/*是否反向*/ ));
注:这里用
LinearLayoutManager表示这是使用线性布局,也可以使用
GridLayoutManager等.
2.2.3.绑定Adapter(参考 2.3.创建Adapter)
mAdapter = new LinearLayoutManagerAdapter(this); mRecyclerView.setAdapter(mAdapter);
2.2.4.添加数据
... mAdapter.addItem(user); ...
也可以使用
... mAdapter.addItems(users); ...
注:
addItem(),
addItems()方法是自定义的,主要是为了把数据添加操作和动画放在一起.
2.3.创建Adapter
2.3.1.创建LinearLayoutManagerAdapter
类
public class LinearLayoutManagerAdapter{ }
2.3.2.让类继承RecyclerView.Adapter
public class LinearLayoutManagerAdapter extends RecyclerView.Adapter{ }
2.3.3.注意,RecyclerView.Adapter
是泛型类,需要一个继承至RecyclerView.ViewHolder
的泛型参数(?),这里我们创建一个ViewHolder
的内部类:
public class LinearLayoutManagerAdapter extends RecyclerView.Adapter{ public class ViewHolder extends RecyclerView.ViewHolder{ } }
2.3.4.添加泛型声明
public class LinearLayoutManagerAdapter extends RecyclerView.Adapter<LinearLayoutManagerAdapter.ViewHolder>{ public class ViewHolder extends RecyclerView.ViewHolder{ } }
2.3.5.实现方法
public class LinearLayoutManagerAdapter extends RecyclerView.Adapter<LinearLayoutManagerAdapter.ViewHolder>{ @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { return null; } @Override public void onBindViewHolder(ViewHolder holder, int position) { } @Override public int getItemCount() { return 0; } public class ViewHolder extends RecyclerView.ViewHolder{ public ViewHolder(View itemView) { super(itemView); } } }
2.3.6.添加构造器
public class LinearLayoutManagerAdapter extends RecyclerView.Adapter<LinearLayoutManagerAdapter.ViewHolder>{ private final Context context; public LinearLayoutManagerAdapter(Context context) { this.context = context; } ... }
2.3.7.指定item_view
,注意这里与ListView不同,这里不返回View,而是返回ViewHolder(自已定义的).
@Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(context).inflate(R.layout.item_linear, parent, false); return new ViewHolder(view); }
2.3.8.添加数据源
public class LinearLayoutManagerAdapter extends RecyclerView.Adapter<LinearLayoutManagerAdapter.ViewHolder>{ ... private final ArrayList<User> list; public LinearLayoutManagerAdapter(Context context) { this.context = context; list = new ArrayList<>(); } ... @Override public int getItemCount() { return list.size(); } ... }
2.3.9.实现list_item
与数据的绑定
public class LinearLayoutManagerAdapter extends RecyclerView.Adapter<LinearLayoutManagerAdapter.ViewHolder>{ ... @Override public void onBindViewHolder(ViewHolder holder, int position) { holder.bind(list.get(position)); } ... public class ViewHolder extends RecyclerView.ViewHolder{ ... public void bind(User data) { } } }
2.3.10.在ViewHolder
中实现布局元素的绑定与数据的绑定
public class ViewHolder extends RecyclerView.ViewHolder { private final TextView mTextView; private User data; public ViewHolder(View itemView) { super(itemView); mTextView = ((TextView) itemView.findViewById(R.id.text_view)); } public void bind(User data) { mTextView.setText(data.getName()); this.data = data; } }
这里注意一下,请尽量把
ViewHolder相关的布局元素绑定,数据绑定放到
ViewHolder中来实现,而不要放到
onCreateViewHolder(),
onBindViewHolder()中去实现.
2.3.11.其它相关代码
//-----------------------数据增删相关------------------------------- public void addItem(User item) { int positionStart = list.size(); list.add(item); notifyItemInserted(positionStart); } public void addItems(List<User> items) { int positionStart = list.size(); list.addAll(items); notifyItemRangeInserted(positionStart, items.size()); } public void clear() { int itemCount = list.size(); list.clear(); notifyItemRangeRemoved(0, itemCount); }
注:这段代码是为了方便把数据增删和动画效果绑定要一起
3.其它几种例子
LinearLayoutManagerActivityGridLayoutManagerActivity
InContainerActivity
相关文章推荐
- Android Fragment嵌套使用存在的一些BUG以及解决方法
- android studio中批量混淆打包
- [置顶] java生成四位随机数,包含数字和字母 区分大小写,特别适合做验证码,android开发
- Android Fragment中onActivityResult()方法获取不到返回数据或者无响应的解决办法
- android上拉刷新下拉加载
- Android和H5的交互问题
- Android应用Design Support Library 使用研究
- android源码/内核下载
- 在Android 5.0中使用JobScheduler
- Android Animations动画使用详解
- android loader用法
- 添加Android系统设置项
- Android加载图片导致内存溢出(Out of Memory异常)
- Android 菜单定制使用小结
- Android中创建对话框(确定取消对话框、单选对话框、多选对话框)实例代码
- Android内存管理机制详解
- Android版本下载以及切换
- Android项目开发实战之使用Fragment和FragmentTabHost搭建底部菜单(一)
- Android 5.0中使用JobScheduler
- Facebook的Android调试工具Stetho