博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android中级:recyclerView的使用
阅读量:4132 次
发布时间:2019-05-25

本文共 6255 字,大约阅读时间需要 20 分钟。

 

本文包含recycleView中基本使用(item不可点击)+item可点击的案例。

案例一:item不可点击

基本步骤:

/** * recycelView的使用 * 1 initView,获取recycleView * 2 initData()获取数据 * 3 initRecycle(); *          1 new Layoutmanager,并设置属性 *          2 new RecyleAdapter *          3 recycleViwe.setLayoutManager()+recycleView.setAdapter * 4 类MyRecyleAdapter *          重写oncreateHolder()+onBindViewHolder()+类MyRecyclerViewHolder *          1 类MyRecyclerViewHolder,构造方法+item中控件名称 *          2 重写oncreateHolder(),new Holeder  +  findviewByIdz找到item中的控件 *

基本的使用和listview差不多,

区别一:在创建adapter的时候  继承的adapter<>要确定泛型

区别二:在创建adapter的时候需要重写oncreateHolder()+onBindViewHolder() 2个方法,

oncreateHolder(),创建viewHolder;

onBindViewHolder(),将数据与holder做绑定,

区别三:xml中定义RecyclerView 要用全路径

android.support.v7.widget.RecyclerView
,不然报错(inflater....)

代码地址:  

 

 

以下内容参考大神:

实现listView+GridView+StaggeredGrid

 利用recycleView实现以上3中情况,一般需要以下4步,中间2不可以不需要

layoutManager.setOrientation(mLinearLayoutManager);
recyclerView.setItemAnimator(itemAnimator);//
recyclerView.addItemDecoration(mDividerItemDecoration);
recyclerView.setAdapter(adapter);
itemAnimator:
https://github.com/gabrielemariotti/RecyclerViewItemAnimators

 

listview:

recyclerView = (RecyclerView) findViewById(R.id.recyclerView);        /**1  setItemAnimator*/        DefaultItemAnimator itemAnimator =new DefaultItemAnimator();        /**下面几种是导入的libary*///        ScaleInOutItemAnimator itemAnimator = new ScaleInOutItemAnimator(recyclerView);/**item由小变大*///        SlideInOutLeftItemAnimator itemAnimator = new SlideInOutLeftItemAnimator(recyclerView);/**item由左往右*///        SlideInOutRightItemAnimator itemAnimator = new SlideInOutRightItemAnimator(recyclerView);/**item由右向左*///        SlideInOutBottomItemAnimator itemAnimator = new SlideInOutBottomItemAnimator(recyclerView);/*item由下往上**///        SlideInOutTopItemAnimator itemAnimator = new SlideInOutTopItemAnimator(recyclerView);/**item由上往下*///        SlideScaleInOutRightItemAnimator itemAnimator = new SlideScaleInOutRightItemAnimator(recyclerView);/**item由右往左 由小变大*/        recyclerView.setItemAnimator(itemAnimator);        /**2 setLayoutManager*///        LinearLayoutManager layoutManager = new LinearLayoutManager(this);//        layoutManager.setOrientation(LinearLayoutManager.VERTICAL);        recyclerView.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false));        /**3  addItemDecoration*/        recyclerView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL_LIST));        /**4  setAdapter*/        adapter = new ListGridAdapter(context,list);        recyclerView.setAdapter(adapter);
/**设置点击事件*/        adapter.setOnItemClickListener(new ListGridAdapter.OnItemClickListener() {            @Override            public void onItemClick(View view, int position) {                Toast.makeText(ListActivity.this, "clcik", Toast.LENGTH_SHORT).show();            }            @Override            public void onItemLongClick(View view, int position) {                Toast.makeText(ListActivity.this, "long clcik", Toast.LENGTH_SHORT).show();            }        }); adapter:
public class ListGridAdapter extends RecyclerView.Adapter
{ private static final String TAG = "ListGridAdapter"; public Context context; public List list; public ListGridAdapter(Context context, List
list) { this.context = context; this.list = list; } @Override public MyHolder onCreateViewHolder(ViewGroup parent, int viewType) { View itemView = LayoutInflater.from(context).inflate(R.layout.item_list_grid,parent,false); MyHolder holder = new MyHolder(itemView); return holder; } @Override public void onBindViewHolder(final MyHolder holder, final int position) { holder.textView.setText((String)list.get(position)); /**如果有回调,则设置点击事件*/ if (mOnItemClickListener !=null){ holder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { /**pos = position * v = holder.itemView*/// int pos = holder.getLayoutPosition();// mOnItemClickListener.onItemClick(holder.itemView,pos); mOnItemClickListener.onItemClick(v,position); } }); holder.itemView.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View v) {// int pos = holder.getLayoutPosition();// mOnItemClickListener.onItemLongClick(v,pos); mOnItemClickListener.onItemLongClick(v, position); return true; /**return :true if the callback consumed the long click, false otherwise; * true:事件被setOnLongClickListener 消耗掉 * false:事件没有被消耗掉,转而有setOnClickListener消耗*/ } }); } } @Override public int getItemCount() { return list.size(); } class MyHolder extends RecyclerView.ViewHolder{ TextView textView; public MyHolder(View itemView) { super(itemView); textView = (TextView) itemView.findViewById(R.id.text); } } /**设置回调*/ public interface OnItemClickListener{ public void onItemClick(View view,int position); public void onItemLongClick(View view,int position); } public OnItemClickListener mOnItemClickListener; public void setOnItemClickListener(OnItemClickListener mOnItemClickListener){ this.mOnItemClickListener = mOnItemClickListener; } /**添加+删除数据*/ public void addItem(int position){ list.add(position,"insert one"); notifyItemInserted(position);/**插入的item在集合list中的位置position,也就是它的角标*/ } public void removeItem(int position){ list.remove(position); notifyItemRemoved(position); }} gridView 与listview类似:只是GridLayoutManager
GridLayoutManager layoutManager = new GridLayoutManager(context,3);        /**gridview水平方向显示,item的width最好>100dp便于观察*///        GridLayoutManager layoutManager =new GridLayoutManager(context,3,GridLayoutManager.HORIZONTAL,false);        recyclerView.setLayoutManager(layoutManager);
 
 
 

 

 

 

你可能感兴趣的文章
leetcode刷题191 位1的个数 Number of 1 Bits(简单) Python Java
查看>>
leetcode刷题198 打家劫舍 House Robber(简单) Python Java
查看>>
NG深度学习第一门课作业2 通过一个隐藏层的神经网络来做平面数据的分类
查看>>
leetcode刷题234 回文链表 Palindrome Linked List(简单) Python Java
查看>>
NG深度学习第二门课作业1-1 深度学习的实践
查看>>
Ubuntu下安装Qt
查看>>
Qt札记
查看>>
我的vimrc和gvimrc配置
查看>>
hdu 4280
查看>>
禁止使用类的copy构造函数和赋值操作符
查看>>
C++学习路线
查看>>
私有构造函数
查看>>
组队总结
查看>>
TitledBorder 设置JPanel边框
查看>>
DBCP——开源组件 的使用
查看>>
抓包工具
查看>>
海量数据相似度计算之simhash和海明距离
查看>>
DeepLearning tutorial(5)CNN卷积神经网络应用于人脸识别(详细流程+代码实现)
查看>>
DeepLearning tutorial(6)易用的深度学习框架Keras简介
查看>>
DeepLearning tutorial(7)深度学习框架Keras的使用-进阶
查看>>