RecyclerView 基本用法

2018-02-28  本文已影响0人  shpunishment
《第一行代码》中的例子:

app/build.grade 添加:

    implementation 'com.android.support:recyclerview-v7:26.1.0'
  1. 先在 Activity 或 Fragment 中的布局文件添加:
    <android.support.v7.widget.RecyclerView
        android:id="@+id/recycler_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        />
  1. 创建 RecyclerView 中的子项布局文件
  2. 设置 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();
    }

}
  1. 在 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);
  1. 效果


    RecyclerView.gif

上一篇 下一篇

猜你喜欢

热点阅读