1,RecyclerView 介绍
-
android 5.0新控件。放到兼容包。可以运行低版本
-
RecyclerView是替换ListView与GridView,升级后的ListView.
2,RecyclerView 简单使用
【1】添加依赖
compile 'com.android.support:recyclerview-v7:23.2.0'
【2】创建布局
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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"
tools:context="com.itheima.a002recyclerview.MainActivity">
<android.support.v7.widget.RecyclerView
android:id="@+id/rv"
android:layout_width="match_parent"
android:layout_height="match_parent">
</android.support.v7.widget.RecyclerView>
</RelativeLayout>
【3】MainActivity下onCreate获取控件
-
获取控件
RecyclerView recyclerView = (RecyclerView) findViewById(R.id.rv);
-
创建布局管理者
RecyclerView.LayoutManager layoutManger = new LinearLayoutManager(this);
recyclerView.setLayoutManager(layoutManger);
-
创建适配器
MyAdapter adapter = new MyAdapter();
recyclerView.setAdapter(adapter);
【4】创建适配器
-
构造方法中初始化数据
-
创建itme布局
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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="wrap_content"
tools:context="com.itheima.a002recyclerview.MainActivity">
<ImageView
android:id="@+id/img"
android:src="@mipmap/ic_launcher"
android:layout_width="80dp"
android:layout_height="80dp" />
<TextView
android:background="#FFF000"
android:id="@+id/text"
android:layout_toRightOf="@id/img"
android:layout_width="match_parent"
android:text="---"
android:textSize="22sp"
android:layout_height="wrap_content" />
<View
android:visibility="gone"
android:layout_alignParentBottom="true"
android:background="#C80000"
android:layout_width="match_parent"
android:layout_height="1dp"/>
</RelativeLayout>
-
getItemCount, 设置条目数量
-
onCreateViewHolder, 初始化itme布局
-
onBindViewHolder, 设置数据
-
MyViewHolder 可以通过插件进行初始化必须继承 RecyclerView.ViewHolder
package com.xiaoshuai.a002recyclerview;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.List;
import butterknife.BindView;
import butterknife.ButterKnife;
/**
* Created by Administrator on 2016/11/30.
*/
//是什么?是一堆 get方法 。由rv,lv,gv viewpager调用
// RecyclerView.Adapter封装了 getView优化
//条目的高度由什么决定 ?由内容的高度
public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
//1.7 泛型自动推断
private List<String> list = new ArrayList<>();
public MyAdapter() {
for (int i = 0; i < 30; i++) {
list.add("经验值" + i);
}
}
//条目数量
@Override
public int getItemCount() {
return list.size();
}
//RecyclerView.ViewHolder是缓存条目控件
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
int itemId = R.layout.item;
// View itemView=View.inflate(parent.getContext(),itemId,null);
//1.条目布局
//2.RecyclerView 传入给item参考宽度
//3.是否把打气布局添加到父控件 true添加,报错 二次添加 false,不添加 仅参考宽度
View itemView= LayoutInflater.from(parent.getContext()).inflate(R.layout.item_cardview,parent,false);
MyViewHolder myViewHolder=new MyViewHolder(itemView);
return myViewHolder;
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
MyViewHolder hd= (MyViewHolder) holder;
//数据
String item = list.get(position);
hd.text.setText(item);
//字段
}
static class MyViewHolder extends RecyclerView.ViewHolder{
@BindView(R.id.img)
ImageView img;
@BindView(R.id.text)
TextView text;
@BindView(R.id.activity_main)
RelativeLayout activityMain;
public MyViewHolder(View itemView) {
super(itemView);
ButterKnife.bind(this, itemView);
}
}
}