How to set different columns for rows in android gridview

后端 未结 10 837
旧时难觅i
旧时难觅i 2020-12-01 07:17

I want to have a gridview similar to this

\"enter

Every odd numbered row will

10条回答
  •  谎友^
    谎友^ (楼主)
    2020-12-01 08:06

    There is how does it work in my project I have different height of cells and also header

    adapter:

    public class AdapterRecViewMain
        extends RecyclerView.Adapter {
    
    private List mainCardList;
    private final int HEADER_VIEW = 0;
    private final int FOOTER_VIEW = 1;
    
    public AdapterRecViewMain() {
    }
    
    public void setData(List mainCardList) {
        this.mainCardList = mainCardList;
    }
    
    @Override public int getItemViewType(int position) {
        if (position == 0) {
            return HEADER_VIEW;
        }
        return FOOTER_VIEW;
    }
    
    @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int type) {
        if (type == FOOTER_VIEW) {
            View v = LayoutInflater.from(viewGroup.getContext())
                    .inflate(R.layout.card_main_activity, viewGroup, false);
            return new MainCardViewHolder(v);
        } else {
            View v = LayoutInflater.from(viewGroup.getContext())
                    .inflate(R.layout.header_view_main_activity, viewGroup, false);
            return new HeaderViewHolder(v);
        }
    }
    
    @Override public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int positionItem) {
        final int position = viewHolder.getAdapterPosition();
    
        if (viewHolder instanceof HeaderViewHolder) {
            StaggeredGridLayoutManager.LayoutParams layoutParams =
                    (StaggeredGridLayoutManager.LayoutParams) viewHolder.itemView.getLayoutParams();
            layoutParams.setFullSpan(true);
    
            BaseMarkerElement item = mainCardList.get(position);
            if (item instanceof HeaderView) {
                HeaderView header = (HeaderView) mainCardList.get(position);
                // need to add implementation
            }
        } else if (viewHolder instanceof MainCardViewHolder) {
            MainCardViewHolder currentView = (MainCardViewHolder) viewHolder;
            CardMainActivity currentCard = (CardMainActivity) mainCardList.get(position);
    
            currentView.ivMainCard.setImageResource(currentCard.getIvMainCard());
            currentView.tvBrandName.setText(currentCard.getTvBrandName());
            currentView.tvPrice.setText(currentCard.getTvPrice());
            currentView.tvType.setText(currentCard.getTvType());
        }
    }
    
    @Override public int getItemCount() {
        return mainCardList.size();
    }
    
    private class MainCardViewHolder extends RecyclerView.ViewHolder {
        ImageView ivMainCard;
        TextView tvBrandName;
        TextView tvType;
        TextView tvPrice;
    
        MainCardViewHolder(View view) {
            super(view);
            ivMainCard = (ImageView) view.findViewById(R.id.imageViewMainCard);
            tvBrandName = (TextView) view.findViewById(R.id.tvBrandName);
            tvType = (TextView) view.findViewById(R.id.tvType);
            tvPrice = (TextView) view.findViewById(R.id.tvPrice);
        }
    }
    
    private class HeaderViewHolder extends RecyclerView.ViewHolder {
    
        public HeaderViewHolder(View itemView) {
            super(itemView);
    
        }
    }
    }
    

    In your activity :

    private AdapterRecViewMain adapter;
    private RecyclerView rvMain;
    
    @Override protected void onResume() {
        super.onResume();
        Logger.logGeneral("onResume()");
    
        if (adapter == null) {
            setUpRecView();
        }
    }
    
    private void setUpRecView() {
        adapter = new AdapterRecViewMain();
        adapter.setData(controller.loadData());
        rvMain = (RecyclerView) findViewById(R.id.rvMain);
        final StaggeredGridLayoutManager layoutManager =
                new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL);
        rvMain.setLayoutManager(layoutManager);
    
        rvMain.addOnScrollListener(scrollListener);
        rvMain.setAdapter(adapter);
        adapter.notifyDataSetChanged();
        rvMain.invalidate();
    }
    

提交回复
热议问题