RecyclerView(笔记)
来源:互联网 发布:windows安装器安装win7 编辑:程序博客网 时间:2024/06/05 05:58
写在前面
ListView早些时候还没用熟,后来就出了个RecyclerView,怀着好奇心和贪图所谓的“方便”,就对ListView嗤之以鼻,也不太知道它的使用方法了。现在也懒得回去重新看,就直接对RecyclerView下手了。
记录下自己对这个东西的一个入门学习。
首先如果是在AndroidStudio里的话,使用RecycleView直接Gradle即可。在eclipse里的话就需要多费些心思,要注意v7包与RecyclerView包的版本一致的问题。具体配置就不记录了。
从最基本用起:
public class MainActivity extends Activity {private RecyclerView rl_main;private MainViewAdapter mainViewAdapter;private List<User> dataList;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);rl_main = (RecyclerView) findViewById(R.id.rl_main);dataList = new ArrayList<>();for (int i = 0; i < 30; i++) {dataList.add(new User("name" + i + " ", R.drawable.ic_launcher));}mainViewAdapter = new MainViewAdapter(this, dataList, R.layout.item);rl_main.setAdapter(mainViewAdapter);rl_main.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false));}}
public class MainViewAdapter extends RecyclerView.Adapter<MyViewHolder> {private Context mContext;private List<User> mList;private int itemId;public MainViewAdapter(Context context, List<User> dataList, int itemId) {// TODO Auto-generated constructor stubmContext = context;mList = dataList;this.itemId = itemId;}@Overridepublic int getItemCount() {// TODO Auto-generated method stubreturn mList.size();}@Overridepublic void onBindViewHolder(MyViewHolder viewHolder, int position) {// TODO Auto-generated method stubviewHolder.tv_item.setText(mList.get(position).getName());viewHolder.iv_item.setBackgroundResource(mList.get(position).getImg());}@Overridepublic MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {// TODO Auto-generated method stubView view = LayoutInflater.from(mContext).inflate(itemId, parent, false);MyViewHolder myViewHolder = new MyViewHolder(view);return myViewHolder;}}class MyViewHolder extends ViewHolder {TextView tv_item;ImageView iv_item;public MyViewHolder(View itemView) {super(itemView);// TODO Auto-generated constructor stubtv_item = (TextView) itemView.findViewById(R.id.tv_item);iv_item = (ImageView) itemView.findViewById(R.id.iv_item);}}
图:
RecyclerView.Adapter implementations should subclass ViewHolder and add fields for caching potentially expensive findViewById(int) results.
大致说ViewHolder是用于描述我们的item布局和在里面的元数据,或者说就是对item里面的控件进行 findViewById(int) 的绑定。
在实现Adapter的时候,需要重写三个方法:
onCreateViewHolder(ViewGroup parent, int viewType)
getItemCount()
onBindViewHolder(MyViewHolder viewHolder, int position)
onCreateViewHolder(ViewGroup parent, int viewType) :
This method calls onCreateViewHolder(ViewGroup, int) to create a new RecyclerView.ViewHolder and initializes some private fields to be used by RecyclerView.
在这里创建我们的ViewHolder并初始化一些在RecyclerView里会被使用的私有的东西,像给ViewHolder指定item的布局,为每个item添加点击事件等。
getItemCount() :
Returns the total number of items in the data set hold by the adapter.
一般我们都是返回对象的size。
onBindViewHolder(MyViewHolder viewHolder, int position):
Called by RecyclerView to display the data at the specified position. This method should update the contents of the itemView to reflect the item at the given position.
在这里我们就要对item里的控件进行数据的设置显示了。
加些东西:
多Item布局:
实现让第一个item和最后一个item显示图片,其余的按照dataList的内容显示文字。
定义两个ViewHolder,并对其作出相关判断。
public class MultipleItemAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {// 用枚举类型来标记item的类型public enum HOLDER_TYPE {ITEM_IMAGE, ITEM_TEXT}private Context mContext;private List<String> mList;public MultipleItemAdapter(Context context, List<String> dataList) {mContext = context;mList = dataList;}@Overridepublic int getItemCount() {// TODO Auto-generated method stubreturn mList.size();}@Overridepublic void onBindViewHolder(ViewHolder holder, int position) {// TODO Auto-generated method stubif (holder instanceof TextViewHolder) {((TextViewHolder) holder).textview.setText(mList.get(position));}}@Overridepublic ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {// TODO Auto-generated method stubView itemTextView = LayoutInflater.from(mContext).inflate(R.layout.item_text, parent, false);View itemImageView = LayoutInflater.from(mContext).inflate(R.layout.item_image, parent, false);if (viewType == HOLDER_TYPE.ITEM_TEXT.ordinal()) {TextViewHolder textViewHolder = new TextViewHolder(itemTextView);return textViewHolder;} else {ImageViewHolder imageViewHolder = new ImageViewHolder(itemImageView);return imageViewHolder;}}@Overridepublic int getItemViewType(int position) {// TODO Auto-generated method stubif (position != 0 && position != mList.size() - 1) {return HOLDER_TYPE.ITEM_TEXT.ordinal();} else {return HOLDER_TYPE.ITEM_IMAGE.ordinal();}}}class TextViewHolder extends RecyclerView.ViewHolder {TextView textview;public TextViewHolder(View itemView) {super(itemView);// TODO Auto-generated constructor stubtextview = (TextView) itemView.findViewById(R.id.tv_item);}}class ImageViewHolder extends RecyclerView.ViewHolder {ImageView imageView;public ImageViewHolder(View itemView) {super(itemView);// TODO Auto-generated constructor stubimageView = (ImageView) itemView.findViewById(R.id.iv_item);}}
这里主要多了getItemViewType(int position)这个方法。
Return the view type of the item at position for the purposes of view recycling.
根据位置来获取每个item的类型,这个类型也就是onCreateViewHolder(ViewGroup parent, int viewType) 里的viewType
参考与扩展:
RecyclerView使用详解(二)
RecyclerView.Adapter(需科学上网)
- RecyclerView(笔记)
- RecyclerView.ItemDecoration(笔记)
- RecyclerView笔记
- RecyclerView笔记
- 学习android(RecyclerView)个人笔记二
- RecyclerView学习笔记
- RecyclerView学习笔记
- RecyclerView学习笔记
- recyclerVIew的使用笔记
- android RecyclerView学习笔记
- RecyclerView简单使用笔记
- Android 笔记之RecyclerView
- RecyclerView学习笔记
- [学习笔记]Android RecyclerView
- Android学习笔记:超能RecyclerView组件使用(上)
- Android学习笔记:超能RecyclerView组件使用(上)
- Android开发笔记(一百二十二)循环器视图RecyclerView
- Android学习笔记(三)--ListView与RecyclerView
- oracle知识点复习总结
- hdu 5692 Snacks
- c++第六次实验
- SSH运维常用参数(学习笔记)
- Unity对象up轴指向目的方向进行旋转
- RecyclerView(笔记)
- android 自定义控件 仿照ios storyboard 约束 设置控件宽与高的比例
- SDAU练习三1018
- node.js实现微博系统在express3.0+版本下的实现——所遇问题
- 剑指offer经典题(利用C++的特性)
- n^n的末位数字(快速幂)
- 安卓加载图片过大而导致OOM内存溢出的解决方法(巨坑....)
- 用C++实现一个哈希桶(插入,删除,寻找)
- 毕设系列—客户端:Vitamio框架开发(1)初次安装及配置