1. 如果使用的是AndroidStudio的话,需向build.gradle(注意是app文件夹下的)添加依赖项:
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.1.1'
compile 'com.android.support:cardview-v7:23.1.1'
compile 'com.android.support:recyclerview-v7:23.1.1'
}**
2. 创建布局:
RecycleView的布局文件主要有两个: 其一是RecycleView的layout,一个是其中某一项(item)的layout(类似ListView).关于布 局没有什么好说的,记住RecycleView和CardView要使用全包名就好了:
"http://schemas.android.com/tools" xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
"match_parent"
android:layout_height="match_parent"
android:id="@+id/recycle"
tools:context=".MainActivity" >
3. 创建适配器
创建适配器最少需要实现三个方法:
(1).public abstract VH onCreateViewHolder (ViewGroup parent, int viewType) (VH是你的静态 ViewHolder类)
当RecycleView需要ViewHolder去展示每一个item时,该方法被调用
@Override
public CatsViewHolder onCreateViewHolder(ViewGroup viewGroup,int viewType){
View v= LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item,viewGroup,false);
CatsViewHolder mHolder = new CatsViewHolder(v);
return mHolder;
}
(2). public abstract void onBindViewHolder (VH holder, int position)当RecycleView需要向每一项填充数据时,该方法被调用.
@Override
public void onBindViewHolder(CatsViewHolder viewHolder,int i){
Log.e("RVAdapter","<---onBindViewHolder is called--->");
viewHolder.imageView.setImageResource(mCat.get(i).photoId);
viewHolder.textView.setText(mCat.get(i).descrip);
}
(3). public abstract int getItemCount (), 返回adapter所有的item数目.
@Override
public int getItemCount(){
return mCat.size();
}
4. 使用布局管理器:
(1).RecycleView内置三种布局管理器:
LinearLayoutManager : 以垂直或水平滚动列表方式显示项目。
GridLayoutManager: 在网格中显示项目。
StaggeredLayoutManager: 在分散对齐网格中显示项目。
(2).布局管理器的作用:
布局管理器将确定 RecycleView内各项目视图的位置并决定何时重新使用用户已不可见的项目视图。 如果要重新使用(或重复使用)一个视图,布局管理器可能会要求适配器以数据集中的另一个元素替换视图的内容。 以此方式重复使用视图将可避免创建不必要的视图或执行成本高昂的findViewById() 查找,从而改善性能。
代码如下:
public class MainActivity extends AppCompatActivity {
ArrayList Cats; //Cat类的集合
RecyclerView rv = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initialCats();
//初始化一个Adapter
RVAdapter mAdapter = new RVAdapter(Cats);
//初始化一个LinearLayoutManager
LinearLayoutManager linear = new LinearLayoutManager(this);
linear.setOrientation(LinearLayoutManager.VERTICAL);
//设置LinearLayout的方向为垂直
rv = (RecyclerView)findViewById(R.id.recycle);
//设置为true,RecycleView就有了固定的尺寸,有助于优化
rv.setHasFixedSize(true);
rv.setLayoutManager(linear);
rv.setAdapter(mAdapter);
}
private void initialCats(){
Cats = new ArrayList<>();
Cats.add(new Cat("一只白色的猫", R.drawable.white_cat));
Cats.add(new Cat("一只可爱的猫", R.drawable.cute_cat));
Cats.add(new Cat("一只大脸的猫", R.drawable.big_cat));
Cats.add(new Cat("一只悲伤的猫", R.drawable.a_sad_cat));
}
}
"1.0" encoding="utf-8"?>
"http://schemas.android.com/apk/res/android"
xmlns:cardview="http://schemas.android.com/tools"
android:id="@+id/card_view"
android:layout_width="fill_parent"
android:layout_height="200dp"
android:layout_gravity="center_horizontal"
cardview:cardElevation="4dp"
cardview:cardCornerRadius="5dp">
"fill_parent"
android:layout_height="240dp"
android:orientation="vertical"
android:padding="8dp">
"match_parent"
android:layout_height="130dp"
android:id="@+id/imageView"
android:scaleType="centerCrop"
android:contentDescription="@string/app_name"
/>
"fill_parent"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="#333333"
android:id="@+id/textView"
android:layout_gravity="center_horizontal"
android:layout_marginLeft="5dp"
android:layout_marginStart="5dp"
android:textSize="30sp"
/>
2.比较的重要属性:
cardview:cardElevation : 创建阴影,关于阴影请阅读Android官方文档关于的MaterialDesign的说明.
cardview:cardCornerRadius: 设置圆角半径
card_view:cardBackgroundColor: 设置卡片北京颜色.
此次我们讨论了RecycleView&CardView的简单用法,当然这还远远不够,后续我们将一起学习如何在RecycleView中显示不同的View,以及如何为RecycleVIew加Header和Bottom,删除item,还有LayoutManager的运作机制.
这是我第一次用markdown记笔记,可能还有所欠缺.
有部分内容应用自官方文档.
全部代码在此 http://download.csdn.net/detail/u012946230/9409060