[Android] 快速制作瀑布流的强大控件--RecyclerView

文章目录

    • 1. 在布局中添加
    • 2. 在使用的地方创建和绑定
    • 3 设计一个Adapter
    • 4 RecyclerView 瀑布流布局方式

RecyclerView就是实现列表的空间,例如我们的微信通信录,还有朋友圈的一条条新闻,都是通过RecycleView实现的,可见其重要性。

它的基本使用步骤:

1. 在布局中添加

在布局文件中插入RecycleView。

<androidx.recyclerview.widget.RecyclerView
    android:id="@+id/recycler_view"
    android:layout_width="match_parent"
    android:layout_height="522dp" />

2. 在使用的地方创建和绑定

Java中创建并绑定

RecyclerView recycler_view;
recycler_view=findViewById(R.id.recycler_view);

设置这个RecyclerView的适配器和布局方式:

// 设置布局方式       
LinearLayoutManager linearLayoutManager=new LinearLayoutManager(this);
linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
recycler_view.setLayoutManager(linearLayoutManager);
// 设置数据填充的适配器
RecyclerView.Adapter contactAdapter=new ContactAdapter(contatList);
recycler_view.setAdapter(contactAdapter);

3 设计一个Adapter

适配器是一个模具,RecycleView中是要放一个列表的数据,比如,联系人列表,朋友圈动态列表。

这整个列表就像是一个模具组,里面的每一个联系人就是一个个模子。我们的数据就是要装到这一个个的模子中的。

接下来我们来构建这个模具组(adapter)的工厂,共有这么几个零件:


import java.util.List;

public class ContactAdapter extends RecyclerView.Adapter<ContactAdapter.MyViewHolder> {
    // 1. 物料堆放区:用于存储数据
    List<ContactInfo> mContactList;
    // 2. 入库门:从外部加载进数据
    ContactAdapter(List<ContactInfo> contactList){
        mContactList=contactList;
    }
    // 3. 模具生产区:用来指定所创建的模具(viewHolder)的外观和功能
    @NonNull
    @Override
    public ContactAdapter.MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view= LayoutInflater.from(parent.getContext()).inflate(R.layout.contact_layout,parent,false);
        final MyViewHolder myVH=new MyViewHolder(view);
        myVH.headImg.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                int pos=myVH.getAdapterPosition();
                ContactInfo curContact = mContactList.get(pos);
                Toast.makeText(view.getContext(),"you just clicked the "+curContact.getName(),Toast.LENGTH_SHORT).show();
            }
        });
        return myVH;
    }
    // 4. 模具填充物料流水线:用来把数据原料填充进模具中
    @Override
    public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
        holder.headImg.setImageResource(mContactList.get(position).getImgId());
        holder.title.setText(mContactList.get(position).getName());
    }
    //5. 计件区:统计总共有多少的模具
    @Override
    public int getItemCount() {
        return mContactList.size();
    }
    //6. 模具设计区: 用于设计我们的模具需要哪些数据
    public class MyViewHolder extends RecyclerView.ViewHolder {
        ImageView headImg;
        TextView title;
        View mView;
        public MyViewHolder(@NonNull View itemView) {
            super(itemView);
            headImg=itemView.findViewById(R.id.head_image);
            title  =itemView.findViewById(R.id.title);
            mView =itemView;
        }
    }
}

[Android] 快速制作瀑布流的强大控件--RecyclerView_第1张图片

4 RecyclerView 瀑布流布局方式

// 第一个参数设置瀑布流的列数,第二个设置 方向为垂直
StaggeredGridLayoutManager manager=new StaggeredGridLayoutManager(3,StaggeredGridLayoutManager.VERTICAL);
recycler_view.setLayoutManager(manager);

[Android] 快速制作瀑布流的强大控件--RecyclerView_第2张图片

你可能感兴趣的:(android,晋级之路)