RecyclerView使用详解(一)
来源:互联网 发布:python reverse() 编辑:程序博客网 时间:2024/05/18 14:23
一、前言
RecyclerView是谷歌V7包下新增的控件,用来替代ListView的使用,在RecyclerView标准化了ViewHolder类似于ListView中convertView用来做视图缓.
先来说说RecyclerView的有点就是,他可以通过设置LayoutManager来快速实现listview、gridview、瀑布流的效果,而且还可以设置横向和纵向显示,添加动画效果也非常简单(自带了ItemAnimation,可以设置加载和移除时的动画,方便做出各种动态浏览的效果),也是官方推荐使用的.以下是官方的说明:
RecyclerView is a more advanced and flexible version of ListView. This widget is a container for large sets of views that can be recycled and scrolled very efficiently. Use the RecyclerView widget when you have lists with elements that change dynamically. 简单说就是当你需要动态展示一组数据的时候就会需要用到它。
讲了这么多虚的,接下来我们看看在代码中怎么来实现.
二、实现
首先要用这个控件,你需要在gradle文件中添加包的引用(配合官方CardView使用)
compile 'com.android.support:cardview-v7:21.0.3'compile 'com.android.support:recyclerview-v7:21.0.3'
然后是在XML文件用使用它
<android.support.v7.widget.RecyclerView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/recycler_view" android:layout_centerVertical="true" android:layout_centerHorizontal="true"/>
接着在Activity中设置它
public class MainActivity extends ActionBarActivity { @InjectView(R.id.recycler_view) RecyclerView mRecyclerView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.inject(this); mRecyclerView.setLayoutManager(new LinearLayoutManager(this));//这里用线性显示 类似于listview// mRecyclerView.setLayoutManager(new GridLayoutManager(this, 2));//这里用线性宫格显示 类似于grid view// mRecyclerView.setLayoutManager(new StaggeredGridLayoutManager(2, OrientationHelper.VERTICAL));//这里用线性宫格显示 类似于瀑布流 mRecyclerView.setAdapter(new NormalRecyclerViewAdapter(this)); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { int id = item.getItemId(); if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); }}
然后是适配器代码
public class NormalRecyclerViewAdapter extends RecyclerView.Adapter<NormalRecyclerViewAdapter.NormalTextViewHolder> { private LayoutInflater mLayoutInflater; private Context mContext; private String[] mTitles; public NormalRecyclerViewAdapter(Context context) { mTitles = context.getResources().getStringArray(R.array.titles); mContext = context; mLayoutInflater = LayoutInflater.from(context); } @Override public NormalTextViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { return new NormalTextViewHolder(mLayoutInflater.inflate(R.layout.item_text, parent, false)); } @Override public void onBindViewHolder(NormalTextViewHolder holder, int position) { holder.mTextView.setText(mTitles[position]); } @Override public int getItemCount() { return mTitles == null ? 0 : mTitles.length; } public static class NormalTextViewHolder extends RecyclerView.ViewHolder { @InjectView(R.id.text_view) TextView mTextView; NormalTextViewHolder(View view) { super(view); ButterKnife.inject(this, view); view.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Log.d("NormalTextViewHolder", "onClick--> position = " + getPosition()); } }); } }}
三、效果图
LinearLayoutManager样式
GridLayoutManager样式
项目地址:
https://github.com/Frank-Zhu/AndroidRecyclerViewDemo
- RecyclerView使用详解(一)
- RecyclerView使用详解(一)
- RecyclerView使用详解(一)
- RecyclerView使用详解(一)
- RecyclerView使用详解(一)
- RecyclerView使用详解(一)
- RecyclerView使用详解(一)
- RecyclerView使用详解(一)
- Android RecyclerView使用详解(一)
- Android 中RecyclerView使用详解(一)
- Android RecyclerView使用详解一
- RecyclerView 的使用详解(一)
- RecyclerView 的使用详解(一)
- RecyclerView使用(一)
- Android RecyclerView 详解(一)最最最基本使用
- RecyclerView使用进阶(一)
- RecyclerView的使用(一)
- Recyclerview使用体验(一)
- DotNet 资源大全中文版(Awesome最新版)
- SpringMVC源码剖析(五)-消息转换器HttpMessageConverter
- Android 根据包名判断app是否安装
- 基本法求解位示图编号问题
- Git忽略规则及.gitignore规则不生效的解决办法
- RecyclerView使用详解(一)
- Java虚拟机学习(2):垃圾收集算法
- OPECNCV 3.0 机器学习算法总结
- python表单提交
- 动态广播和静态广播接收时间备注
- 判断一个范围内的哪些是质数
- caffe training instruction for image classification
- 16进制图片在jasperreport模板上显示
- UserDefault数据读取