RecyclerView的简单使用

1、RecyclerView

RecyclerView也是一种显示数据集的控件,但它比ListViewGridView强大很多,除了能够完成上面两种控件的功能,还能实现瀑布流的效果,同时支持上拉、下拉刷新。

2、使用方式

  • 引入RecyclerView的依赖包 androidx.recyclerview:recyclerview:1.0.0
  • 布局文件中声明一个RecyclerView组件
  • 在Activity的onCreate方法中找到该组件
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    //找到RecyclerView
    recyclerView = findViewById(R.id.recyclerView);
}
  • 创建一个布局管理器
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
//设置横向显示还是纵向显示
linearLayoutManager.setOrientation(RecyclerView.VERTICAL); 
//设置是否逆序
linearLayoutManager.setReverseLayout(false);
recyclerView.setLayoutManager(linearLayoutManager);
  • 创建一个条目布局文件

每个条目展示一张图片和一段文字




    
    

        

            

            
        

    


  • 创建一个Adapter继承RecyclerView.Adapter
//这里泛型要传入一个继承RecyclerView.ViewHolder的类,于是在ListAdapter中新建了一个内部类
public class ListAdapter extends RecyclerView.Adapter {
    //要展示的数据(自定义)
    private List beans;
    private Context context;

    private LayoutInflater layoutInflater;

    public ListAdapter(Context context, List beans) {
        this.context = context;
        this.beans = beans;
        layoutInflater = LayoutInflater.from(context);
    }

    //指定一个条目的布局文件来创建ViewHolder,ViewHolder相当于一个容器,它持有一个条目中所拥有的的组件
    @NonNull
    @Override
    public InnerHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        return new InnerHolder(layoutInflater.inflate(R.layout.layout_list_item, null));
    }

    //为每个条目布局绑定数据
    @Override
    public void onBindViewHolder(@NonNull InnerHolder holder, int position) {
        holder.setData(beans.get(position));
    }

    //返回条目个数,由提供的数据决定
    @Override
    public int getItemCount() {
        if (beans != null) {
            return beans.size();
        }
        return 0;
    }

    //自定义的ViewHolder,它持有条目布局文件中的组件
    public class InnerHolder extends RecyclerView.ViewHolder {
        private TextView content;
        private ImageView header;

        public InnerHolder(@NonNull View itemView) {
            super(itemView);
            header = itemView.findViewById(R.id.header);
            content = itemView.findViewById(R.id.text);
        }

        public void setData(ItemBean itemBean) {
            header.setImageResource(itemBean.resourceId);
            content.setText(itemBean.content);
        }
    }
}

效果如下:
RecyclerView的简单使用_第1张图片

这里用的是LinearLayoutManagerRecyclerView还支持
GridLayoutManager,StaggeredGridLayoutManager,适配器类写法相同,只是后两种布局管理器构造方式不同。

你可能感兴趣的:(RecyclerView的简单使用)