RecycleView的简单应用
来源:互联网 发布:linux安装mysql源码包 编辑:程序博客网 时间:2024/05/23 02:15
RecycleView是Android L版本中新添的一个用来取代ListView SDK的控件,RecycleView具有灵活性好,扩展性强等功能,一经推出就受到了很大的欢迎,下边是小编闲暇时写的一个简单的demo,供还没有习惯用recycleView来开发的兄台参考:
1、先看一下主界面布局:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.example.wls.recycletext.MainActivity"> <android.support.v7.widget.RecyclerView android:id="@+id/recycle_view" android:layout_width="match_parent" android:layout_height="wrap_content"/> <Button android:id="@+id/btn_add" android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="btnClick" android:text="添加数据"/> <Button android:id="@+id/btn_remove" android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="btnClick" android:text="移除数据"/></LinearLayout>很简单的一个线性布局,这里我添加了两个按钮,用来实现数据的添加和删除,点击和长按事件
2、Activity中主要代码:
private RecyclerView mRecycleView;private String [] datas = {"头条","新闻","财经","视频","音乐","美女","图片","糗百","笑话","小品","科技","小说","搞笑","百思不得姐","直播"};private ArrayList<String> mList;private TextAdapter adapter;@Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); init(); loadData();}/** 初始化控件 */private void init() { mRecycleView = (RecyclerView) findViewById(R.id.recycle_view); mList = new ArrayList<>(); adapter = new TextAdapter(this,mList);}/** 数据的加载 */private void loadData() { for(int i = 0; i <datas.length; i++){ mList.add(datas[i]); } /** * 设置布局管理器 * lsitview样式则为new LinearLayoutManager(this) * GridView样式则为new GridLayoutManager(this,3) * 瀑布流样式则为new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL) * */ // mRecycleView.setLayoutManager(new LinearLayoutManager(this)); mRecycleView.setLayoutManager(new GridLayoutManager(this,3)); // mRecycleView.setLayoutManager(new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL)); /** 自定义间距 */ int space = getResources().getDimensionPixelOffset(R.dimen.space); mRecycleView.addItemDecoration(new SpaceItemDecoration(space)); //设置item动画 mRecycleView.setItemAnimator(new DefaultItemAnimator()); mRecycleView.setAdapter(adapter); adapter.setmOnItemClick(this);}public void btnClick(View view){ switch (view.getId()){ case R.id.btn_add: adapter.addDatas(0,"数码"); break; case R.id.btn_remove: adapter.removeDatas(0); break; }}@Overridepublic void OnClickListener(View view, int position) { Toast.makeText(this,"点击了第" + position + "个item",Toast.LENGTH_LONG).show();}@Overridepublic void OnLongPressListener(View view, int position) { Toast.makeText(this,"长按了第" + position + "个item",Toast.LENGTH_LONG).show();}
关于RecycleView的处理有很多方式,像自定义item动画,分割线的设置等,这里只是处理了数据的添加,删除,item的点击和长按等时间,以及RecycleView的一些属性介绍,比较坑的就是RecycleView并没有ListView中的addHeaderView和addFooterView,这两个方法,如果想要添加头部和尾部的话,就需要自定义的去修改来实现,不过Github上已经有了实现代码:https://github.com/blipinsk/RecyclerViewHeader这里介绍了如何给RecycleView增加头部,当然也可以参考张鸿洋大神的博客:http://blog.csdn.net/lmj623565791/article/details/51854533
3、RecycleView的适配器:
public class TextAdapter extends RecyclerView.Adapter<TextAdapter.TextViewHolder>{ private Context context; private ArrayList<String> datas; private OnItemClick mOnItemClick; public TextAdapter(Context context,ArrayList<String> datas){ this.context = context; this.datas = datas; } public void setmOnItemClick(OnItemClick mOnItemClick) { this.mOnItemClick = mOnItemClick; } /** 添加数据 */ public void addDatas(int position,String value){ if(position > datas.size()){ position = datas.size(); } if(position < 0){ position = 0; } datas.add(position,value); /** * 在指定位置添加数据 * 使用notifyItemInserted和notifyItemRemoved时有动画效果 * 使用notifyDataSetChanged()时,没有动画效果 * */ notifyItemInserted(position); // notifyDataSetChanged(); } /** 移除数据 */ public void removeDatas(int position){ if(position > datas.size() - 1){ return; } datas.remove(position); /** * 移除指定位置的数据 */ notifyItemRemoved(position); } @Override public TextViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(context).inflate(R.layout.adapter_recycleview,parent,false); return new TextViewHolder(view); } @Override public void onBindViewHolder(TextViewHolder holder, int position) { bindData(holder,position); } /** 绑定数据 */ private void bindData(TextViewHolder holder, final int position) { holder.mTextView.setText(datas.get(position)); holder.mTextView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mOnItemClick.OnClickListener(v,position); } }); holder.mTextView.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View v) { mOnItemClick.OnLongPressListener(v,position); return true; } }); } @Override public int getItemCount() { return datas.size() ; } interface OnItemClick{ public void OnClickListener(View view,int position); public void OnLongPressListener(View view,int position); } class TextViewHolder extends RecyclerView.ViewHolder{ TextView mTextView; public TextViewHolder(View itemView) { super(itemView); mTextView = (TextView) itemView.findViewById(R.id.text_view); } }}
RecyclerView使用的是全新的适配器。与AdapterView使用的适配器类似,但也略有不同,比如RecyclerView必须使用标准化ViewHolder。使用时需要重写两个主要方法onCreateViewHolder和onBindViewHolder:分别用来展现视图和它的持有者和把数据绑定到视图上。这样设计的优势在于只有当我们真正需要去创建一个新视图才会调用onCreateViewHolder,不需要去检查它是否已被回收,然后再与数据绑定。而且RecyclerView不再负责Item视图的布局及显示,所以RecyclerView也没有为Item开放OnItemClick等点击事件,这就需要开发者自己实现,代码中利用了接口回调的方式来为Item增加点击和长按监听关于RecycleView的的适配器的封装:https://github.com/Wan7451/Wan_RecycleViewAdapter
4、item布局:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="5dp" android:background="#7c7a7a"> <TextView android:id="@+id/text_view" android:layout_width="match_parent" android:layout_height="48dp" android:gravity="center"/>
5、看一下效果:
RecycleView动画的处理:https://github.com/wasabeef/recyclerview-animators
- RecycleView的简单应用
- RecycleView的简单使用
- RecycleView 的简单使用
- RecycleView的简单实现
- RecycleView的简单使用
- RecycleView的简单使用
- Android RecycleView---- RecycleView的简单使用
- RecycleView简单应用以及上拉刷新
- RecycleView.Adapt的简单封装
- Recycleview的各种炫酷应用
- Android 开发之RecycleView的简单使用
- Listview和RecycleView的简单比较
- 使用recycleview实现简单的柱状图
- android:RecycleView的简单封装使用
- Android中RecycleView的简单介绍
- recycleView简单实现listview的效果
- 史上最简单的Recycleview自定义下拉刷新
- RecycleView的基本配置和使用方法(二)---RecycleView实践应用
- vscode 快捷键
- windows7 安装VS2015出现“”安装包丢失或损坏”问题的解决办法
- 蓝桥杯-硬币方案
- 支付宝集成过程详解——运行DEMO
- spring mvc JSON 无限死循环的问题
- RecycleView的简单应用
- sudo: unable to resolve host 已解决
- 希尔排序
- 职场手记1_你想成文什么样的人
- zookeeper单机多实例与Solr6.4.2集成solrCloud-linux环境(一)
- Longest Substring Without Repeating Characters
- mysql_合并两个表中相同字段
- 机器学习之——线性回归模型及其扩展
- 探索并发编程(二)------写线程安全的Java代码