首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >GridLayout和LinearLayout都在一个RecyclerView中

GridLayout和LinearLayout都在一个RecyclerView中
EN

Stack Overflow用户
提问于 2016-12-13 09:53:44
回答 1查看 9.7K关注 0票数 20

知道如何在一个视图中使用两个不同的LayoutManager吗?我在屏幕顶部和底部的网格中有四张卡片,我想要LinearLayout,但是RecyclerView一次只显示一个视图

代码语言:javascript
运行
复制
RecyclerView.LayoutManager mLayoutManager = new GridLayoutManager(this, 2);
recyclerView.setLayoutManager(mLayoutManager);
RecyclerView.LayoutManager lmLayoutManager = new LinearLayoutManager(this);
recyclerView.setLayoutManager(lmLayoutManager);
recyclerView.addItemDecoration(new GridSpacingDashboard(2, dpToPx(2), true));
recyclerView.setItemAnimator(new DefaultItemAnimator());
recyclerView.setAdapter(adapter);

我是否可以在单个RecyclerView或索引O中同时使用GridLayout和1显示LinearLayout的视图,如果存在任何可能性,如何实现?

更新(卡适配器)

代码语言:javascript
运行
复制
    public class CardAdapter extends RecyclerView.Adapter<adapter.CardAdapter.CardViewHolder> {

        public static final int topGridCard = 0;
        public static final int bottomCards=1;

        private Context mContext;
        private List<CardModel> cardList;

        public CardAdapter(Context mContext, List<CardModel> cardList) {
            this.mContext = mContext;
            this.cardList = cardList;
        }

        @Override
        public.adapter.CardAdapter.CardViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            View v;

            if (viewType == topGridCard) {
                v = LayoutInflater.from(parent.getContext()).inflate(R.layout.card_view_sec, parent, false);
                return new adapter.CardAdapter.TopGridCardView(v);

            }
            else if (viewType == bottomCards) {
                v = LayoutInflater.from(parent.getContext()).inflate(R.layout.card_view, parent, false);
                return new adapter.CardAdapter.BottomCardView(v);
            }
            return null;
        }

        @Override
        public void onBindViewHolder(final adapter.CardAdapter.CardViewHolder holder, final int position) {
            CardModel cardModel = cardList.get(position);
            if (holder.getItemViewType()==topGridCard){ adapter.CardAdapter.TopGridCardView vholder = (adapter.CardAdapter.TopGridCardView) holder;
                vholder.secTitleStats.setText(cardModel.getNumStats());
                vholder.secNumStats.setText(cardModel.getCardTitles());
                vholder.secCardStats.setText(cardModel.getSecCartNumStats());
                Glide.with(mContext).load(cardModel.getThumbnail()).into(vholder.secthumbnail);
            }
            else if(holder.getItemViewType()==bottomCards){
adapter.CardAdapter.BottomCardView vholder = (adapter.CardAdapter.BottomCardView) holder;
                vholder.numStats.setText(cardModel.getNumStats());
                vholder.image_title.setText(cardModel.getCardTitles());
                Glide.with(mContext).load(cardModel.getThumbnail()).into(vholder.thumbnail);
            }       
        }

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

        public static class CardViewHolder extends RecyclerView.ViewHolder {
            public CardViewHolder(View v) {
                super(v);
            }
        }

        public class TopGridCardView extends adapter.CardAdapter.CardViewHolder {
            public TextView secTitleStats, secNumStats,secCardStats;
            public ImageView secthumbnail;

            public TopGridCardView(View view){
                super(view);

                secTitleStats = (TextView) view.findViewById(R.id.secTitleNumStats);
                secNumStats = (TextView) view.findViewById(R.id.secCardNumStats);
                secCardStats = (TextView) view.findViewById(R.id.sectitle);
                secthumbnail = (ImageView) view.findViewById(R.id.seCthumbnail);
            }
        }

        public class BottomCardView extends adapter.CardAdapter.CardViewHolder {

            public TextView numStats,image_title;
            public ImageView thumbnail;

            public BottomCardView(View view) {
                super(view);
                numStats=(TextView)view.findViewById(R.id.numStatics);
                image_title=(TextView) view.findViewById(R.id.title_overlay);
                thumbnail = (ImageView) view.findViewById(R.id.thumbnail);
            }
        }

        @Override
        public int getItemViewType(int position) {
            if (isPositionHeader(position))
                return topGridCard;
            return bottomCards;
        }

        private boolean isPositionHeader(int position) {
            return position == 0;
        }
    }

为了更好的理解,我已经附上了我的适配器,希望得到的结果应该是:\x网格卡1\\>网格卡2\>网格卡3\ LinearLayout卡4\x\=

任何可能性

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-13 12:19:24

您可以简单地使用gridLayout和不同的viewType来实现这一点。

代码语言:javascript
运行
复制
    mLayoutManager = new GridLayoutManager(getActivity(), 2);
    mLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
        @Override
        public int getSpanSize(int position) {
            switch (adapter.getItemViewType(position)) {
                case MenuAdapter.ITEM:
                    return 1;
                case MenuAdapter.FULLSIZE:
                    return 2;
                default:
                    return 1;
            }
        }
    });
    recyclerView.setLayoutManager(mLayoutManager);

其中项目是网格( 2x列),然后返回1,否则完全大小返回2(取2x网格列)。

希望能帮上忙。

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

https://stackoverflow.com/questions/41118072

复制
相关文章

相似问题

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