瀑布流

本文详细介绍了如何在Android应用中实现瀑布流布局的RecyclerView。通过自定义StaggeredAdapter适配器,结合StaggeredGridLayoutManager布局管理器,实现了动态加载不同大小的卡片视图。文章还展示了如何使用Glide加载图片,以及如何添加分割线装饰。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//适配器

/**
 * 继承RecyclerView.Adapter<LinearAdapter.ViewHolder>
 */
public class StaggeredAdapter extends RecyclerView.Adapter<StaggeredAdapter.ViewHolder> {
    private List<UserBean> list;
    private Context context;

    public StaggeredAdapter(Context context) {
        this.context = context;
        list = new ArrayList<>();
    }
    //相当于上下文  Content


    public void addItem(UserBean userBean){
        if (userBean != null){
            list.add(userBean);
        }
    }
    /**
     * 静态内部类 ViewHolder
     */
    static class ViewHolder extends RecyclerView.ViewHolder {
        //列出所有需要用到的控件
        private final TextView name;
        private final ImageView image;
        //写一个构造方法,找到所有的控件(就是获取资源ID)
        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            name = itemView.findViewById(R.id.text_linear);
            image = itemView.findViewById(R.id.image_linear);
        }
    }

    @Override
    public void onBindViewHolder(@NonNull StaggeredAdapter.ViewHolder viewHolder, int position) {
        //获取索引值
        UserBean userBean = list.get(position);
        viewHolder.name.setText(userBean.getName());

        Glide.with(context).load(userBean.getImage()).into(viewHolder.image);
    }

    @Override
    public int getItemCount() {
        return list.size();
    }

    @NonNull
    @Override
    public StaggeredAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int position) {
        View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.recycler_staggered_item,viewGroup,false);
        return new ViewHolder(view);
    }
}

//主页

public class recycle_staggered extends Fragment {
    private final int mSpanCount = 2;
    private RecyclerView recyclerView;
    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        return inflater.inflate(R.layout.recycler_staggered,container,false);
    }

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        recyclerView = view.findViewById(R.id.recyclerview_Staggered);
        initView();

    }

    private void initView() {
        //使用瀑布流布局,第一个参数 spanCount 一行几个,第二个参数 orentation 排列方向
        StaggeredGridLayoutManager gridLayoutManager = new StaggeredGridLayoutManager(mSpanCount,StaggeredGridLayoutManager.VERTICAL);
        //设置布局管理器
        recyclerView.setLayoutManager(gridLayoutManager);
        //实例化适配器
        StaggeredAdapter staggeredAdapter = new StaggeredAdapter(getActivity());
        int[] avatarArray = new int[]{R.drawable.zn1,R.drawable.zn2,R.drawable.zn3};
        for (int i = 0; i < 30; i++) {
            UserBean userBean = new UserBean();

            userBean.setName("清仓甩卖,仅需¥88");
            userBean.setImage(avatarArray[i % avatarArray.length]);
            staggeredAdapter.addItem(userBean);
        }
        //设置适配器
        recyclerView.setAdapter(staggeredAdapter);
        DividerGridItemDecoration dividerGridItemDecoration = new DividerGridItemDecoration(getActivity());
        recyclerView.addItemDecoration(dividerGridItemDecoration);
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值