首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >StaggeredGridLayoutManager中的设置范围

StaggeredGridLayoutManager中的设置范围
EN

Stack Overflow用户
提问于 2018-07-09 22:06:49
回答 0查看 1.4K关注 0票数 0

我需要创建一个如下所示的视图(这是一个iOS屏幕截图,因为我已经创建了它)。

每个蓝色框是RecyclerView线性布局的一部分,而每个绿色项目是交错布局的一部分。

我能够创造出这样的结构。问题是我不能让每个灰色的盒子都变成黄色盒子的一半。使用StaggeredGridLayoutManager,我无法控制内部回收器视图中显示的盒子的跨度(大小)。只有GridLayoutManager才有机会设置跨度大小查找。

理想的做法是根据容器的宽度来计算盒子。例如:如果屏幕为99,则黄色框应为66,而灰色框应为33。

你对如何实现这一点有什么建议吗?

下面是我使用的代码片段:

代码语言:javascript
复制
public class BoxViewAdapter extends RecyclerView.Adapter<BoxViewAdapter.BoxViewHolder> {
    private List<Box> mValues;
    private Context mContext;
    protected BoxViewAdapter.ItemListener mListener;

    public BoxViewAdapter(Context context, List<Box> values, BoxViewAdapter.ItemListener itemListener) {
        mValues = values;
        mContext = context;
        mListener = itemListener;
    }

    @Override
    public BoxViewAdapter.BoxViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(mContext).inflate(R.layout.box_view_item, parent, false);
        return new BoxViewAdapter.BoxViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull BoxViewAdapter.BoxViewHolder holder, int position) {
        holder.bind(mValues.get(position));
    }

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

    public interface ItemListener {
        void onItemClick();
    }

    public class BoxViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

        public Box item;
        private RecyclerView recyclerView;

        public BoxViewHolder(View v) {

            super(v);

            v.setOnClickListener(this);

            StaggeredGridLayoutManager staggeredGridLayoutManager = new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.HORIZONTAL);
            recyclerView = v.findViewById(R.id.cardRecyclerView);
            recyclerView.setLayoutManager(staggeredGridLayoutManager);
        }

        public void bind(Box item) {
            this.item = item;
            recyclerView.setAdapter(new CardViewAdapter(itemView.getContext(), item.cards, null));
        }


        @Override
        public void onClick(View view) {
            if (mListener != null) {
                mListener.onItemClick();
            }
        }
    }
}

EN

回答

页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51247550

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档