RecyclerView知识点小解
来源:互联网 发布:淘宝助理5天猫用不了 编辑:程序博客网 时间:2024/05/29 20:00
<pre name="code" class="java" style="font-size: 24px; font-weight: bold; text-align: center;">
RecyclerView知识点小解
在现在的App中, 到处可见RecyclerView的身影, 几乎已经把传统的ListView给迭代更新掉了。
由此可见该组件的重要性。 这篇文章主要就是把RecyclerView的基本知识点给讲解一下, 已经如何使用RecyclerView。
一、注意
该组件是Android超级库里面的, 想要使用需要先把该组件导入工程,本人用的IDE是Android Studio, 最好大家不要采用Eclipse进行开发,
因为Google之前在Eclipse写的ADT太老了。 就算你引用了该组件的JIRA, 编译的时候它也带入不进去。
二、导入
在当前工程的Window找到 File --> Project Structure...会弹出一个新窗口, 点击左边的app --> Dependencies --> '+'(加号) -->
选第一个 --> 找到你要的RecyclerView组件点击OK即可、
因为大多人都知道怎么导入的, 为了方便就不上图片版的嘞。
三、与传统的ListView进行比较
传统的ListView在进行视图复用中并没有硬性要求, 你可以进行视图缓存, 也可以不进行。
但是RecyclerView就提供了一个类为RecyclerView.ViewHolder. 你必须按照视图缓存方式进行处理。
定制Item视图项, ListView只能实现垂直性排列的列表视图, 然而RecyclerView则是通过RecyclerView.LayoutManager进行展示,
只要你能写的出, 就没有办不到的视图呈现方式。 (单单就这一点就可以吧ListView给舍弃了)
Item动画, 还记得在ListView中写动画的时候需要考虑的复杂因素, 而且ListView也没有提供任何方便开发者的接口,
相反的, 可以通过RecyclerView.ItemAnimator来设置每个条目的展示动画。
适配器, 在ListView中有太多的Adapter告诉开发者, 游标适配器、 基本适配器... 太多了, RecycerView就可以让我们开发自己提供
数据集, RecyclerView.Adapter。 这样就可以不需要管那么多Adapter该用什么好了。(我学习ListView的时候, 被这个搞破了脑子)
设置每个Item条目的分割线, ListView中可以设置android:driver属性来控制每个Item可有的分割线, RecyclerView提供了
Recycler.ItemDecoration来控制每个条目的分割效果。(我基本上都是直接采用每个Item的margin或padding的方式进行分割)
Item点击事件, ListView可以直接设置OnItemClickListener方法, 在RecyclerView就可以设置OnItemTouchListener。 明显RecyclerView可以
进行的逻辑操作更多。
四、 基础知识点
RecyclerView.Adapter扮演者重要的角色, 一般我们着重重写他的两个方法。onCreateViewHolder, onBindViewHolder。
public ViewHolder onCreateViewHolder(...)创建Item视图, 并返回响应的ViewHolder
public void onBindViewHolder(....) 绑定当前Item的视图展示项。
RecyclerView.LayoutManager 负责Item的展示, 以及何时回收。 每个RecyclerView必须指定一个LayoutManager, 否则会抛出异常。
LinearLayoutManager : 水平或者垂直的Item视图。
GridLayoutManager: 网格Item视图
StaggereGridLayoutManager交错的网格Item视图。
当然还有一些很实用的API:
findFirstVisibleItemPosition()
返回当前第一个可见Item的positionfindFirstCompletelyVisibleItemPosition()
返回当前第一个完全可见Item的positionfindLastVisibleItemPosition()
返回当前最后一个可见Item的positionfindLastCompletelyVisibleItemPosition()
返回当前最后一个完全可见Item的position五、使用
<span style="font-family:Microsoft YaHei;font-size:14px;">public class MainActivity extends Activity { private RecyclerView mRecyView; private List<String> mDatas; private MyRecyclerViewAdapter mRecyViewAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); initDatas(); mRecyViewAdapter = new MyRecyclerViewAdapter(this, mDatas); mRecyView.setAdapter(mRecyViewAdapter); mRecyView.setLayoutManager(new GridLayoutManager(this, 2)); } private void initDatas() { mDatas = new ArrayList<String>(); mDatas.add(0, "Android"); mDatas.add(1, "IOS"); mDatas.add(2, "Java"); mDatas.add(3, "C"); mDatas.add(4, "C++"); mDatas.add(5, "C#"); mDatas.add(6, "HTML"); mDatas.add(7, "CSS"); mDatas.add(7, "JavaScript"); } private void initView() { mRecyView = (RecyclerView) this.findViewById(R.id.main_recy_view); }}</span>
<span style="font-family:Microsoft YaHei;font-size:14px;">public class MyRecyclerViewAdapter extends RecyclerView.Adapter<MyRecyclerViewAdapter.ViewHolder> { private Context mContext; private List<String> mDatas; private LayoutInflater mLayoutInflater; public MyRecyclerViewAdapter(Context ctx, List<String> datas){ this.mContext = ctx; this.mDatas = datas; mLayoutInflater = LayoutInflater.from(mContext); } @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { return new ViewHolder(mLayoutInflater.inflate(R.layout.main_recy_view_layout, parent, false)); } @Override public void onBindViewHolder(ViewHolder holder, int position) { holder.mTv.setText(mDatas.get(position)); } @Override public int getItemCount() { return mDatas == null ? 0 : mDatas.size(); } class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{ private TextView mTv; public ViewHolder(View itemView) { super(itemView); mTv = (TextView) itemView.findViewById(R.id.main_recy_view_tv); mTv.setOnClickListener(this); } @Override public void onClick(View v) { int id = v.getId(); switch (id){ case R.id.main_recy_view_tv: Toast.makeText(mContext, ((TextView) v).getText().toString(), Toast.LENGTH_SHORT).show(); break; } } }}</span>
运行效果:
大家可切换不同的LayoutManager进行查看效果。
0 0
- RecyclerView知识点小解
- RecyclerView的知识点
- RecyclerView知识点串讲
- Android进阶知识点(RecyclerView)
- Android RecyclerView源码与知识点汇总
- LINQ 小解
- InvalidateRect()小解
- struts小解
- BASE64Decoder小解
- fprintf小解
- RegExp 小解
- 指针小解
- UML 小解
- BASE64Decoder小解
- 线程小解
- 递归小解
- DWR小解
- JSON 小解
- 第三方登录原理
- 通用静态库的生成(模拟器和真机通用)
- 什么是计算机的大小端规则?
- 阿里云服务器
- IPC\DVS\DVR与NVR之间的区别
- RecyclerView知识点小解
- 基于STM32的简易RTOS
- 半数集问题和半数集单集问题
- [数据结构]算法基本概念和推导大O阶步骤
- 【Eclipse】推荐UML插件Green UML、AmaterasUML(转载)
- PHP-加密技术
- 欢迎来到曦哥哥的LOL知识大讲堂
- 我的爱情观
- servlet简介