RecyclerView 基本用法
2018-02-28 本文已影响0人
shpunishment
《第一行代码》中的例子:
app/build.grade 添加:
implementation 'com.android.support:recyclerview-v7:26.1.0'
- 先在 Activity 或 Fragment 中的布局文件添加:
<android.support.v7.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
- 创建 RecyclerView 中的子项布局文件
- 设置 Adapter ,( 继承自 RecyclerView.Adapter ,并设置泛型 FruitAdapter.ViewHolder 。并在其中获取子项布局文件
public class FruitAdapter extends RecyclerView.Adapter<FruitAdapter.ViewHolder> {
/**
* RecylcerView 的 Adapter 步骤:
* 1. 创建内部类 ViewHolder
* 2. 并重写 OnCreateViewHolder()
* OnBindViewHolder()
* getItemCount()
*/
// 用于保存 Context ,用于 onBindViewHolder 时加载图片
private Context mContext;
// 保存传过来的List
private List<Fruit> mfruitList;
/**
* 对子布局中控件的实例进行初始化
*/
static class ViewHolder extends RecyclerView.ViewHolder{
CardView cardView;
ImageView fruitImage;
TextView fruitName;
/**
*
* @param view ( RecyclerView 子项的最外层布局
*/
public ViewHolder(View view){
super(view);
this.cardView=(CardView)view;
this.fruitImage=(ImageView)view.findViewById(R.id.fruit_image);
this.fruitName=(TextView)view.findViewById(R.id.fruit_name);
}
}
/**
* 构造函数,通过在 Activity 或 Fragment 中得到需要展示的List后,赋值给 mfruitList
* 后续操作都在 mfruitList 上进行
* @param fruitList
*/
public FruitAdapter(List<Fruit> fruitList){
mfruitList=fruitList;
}
/**
* 创建 ViewHolder 实例
* @param parent
* @param viewType
* @return
*/
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
if(mContext==null){
mContext=parent.getContext();
}
// 获取子项布局文件 fruit_item.xml
View view= LayoutInflater.from(mContext).inflate(R.layout.fruit_item,parent,false);
// 将加载的布局传入 ViewHolder 的构造函数中
final ViewHolder holder=new ViewHolder(view);
// 传入后的实例 holder 可直接返回,或设置监听器
return holder;
}
/**
* 用于对子项的数据进行赋值,会在每个子项滚动屏幕时执行
* @param holder
* @param position
*/
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
Fruit fruit=mfruitList.get(position);
// 将数据设置到 UI 的 ImageView 和 TextView 中
holder.fruitName.setText(fruit.getName());
Glide.with(mContext).load(fruit.getImageId()).into(holder.fruitImage);
}
/**
* 用于告诉 RecyclerView 一共有多少子项
* @return
*/
@Override
public int getItemCount() {
return mfruitList.size();
}
}
- 在 Activity 的 onCreate 或在 Fragment 的 onCreateView 中使用 RecyclerView
// 完成 fruitList 的数据装填
initFruits();
// 得到 RecyclerView 控件实例
RecyclerView recyclerView=(RecyclerView)findViewById(R.id.recycler_view);
// 在 RecyclerView 使用网格布局方式,两列
GridLayoutManager layoutManager=new GridLayoutManager(MainActivity.this,2);
recyclerView.setLayoutManager(layoutManager);
// fruitList 数据传入适配器,然后 RecyclerView 调用 setAdapter 完成适配器设置
adapter=new FruitAdapter(fruitList);
recyclerView.setAdapter(adapter);
-
效果
RecyclerView.gif