-1

Hello this seems very complicated layout to me if anyone can help me with the sectioned and heterogeneous recyclerview together it would be very good and helpful for me.

enter image description here

Ankita Singh
  • 304
  • 3
  • 17
  • I recommend using a library. I heard Epoxy is good. I personally use this https://github.com/DevAhamed/MultiViewAdapter but in the end it depends on your use case – Zun Apr 13 '18 at 11:57
  • Possible duplicate of [How to create RecyclerView with multiple view type?](https://stackoverflow.com/questions/26245139/how-to-create-recyclerview-with-multiple-view-type) – Gustavo Pagani Apr 13 '18 at 12:56

1 Answers1

0

I have implement the Sectioned like same as , but i don't find the link where i have make. I have code may be you understand . I Have taken 2 recycle view . one is for header and 2nd for the description parts . I even make itemclicklistner for description parts.

SectionRecyclerViewAdapter for header

public class SectionRecyclerViewAdapter extends RecyclerView.Adapter<SectionRecyclerViewAdapter.SectionViewHolder> {


    class SectionViewHolder extends RecyclerView.ViewHolder {
        private TextView header;
        private RecyclerView itemRecyclerView;


        public SectionViewHolder(View itemView) {
            super(itemView);
            header= (TextView) itemView.findViewById(R.id.section_label);
            itemRecyclerView = (RecyclerView)itemView.findViewById(R.id.item_recycler_view);
        }
    }

    private Context context;
    private List<SectionModel> sectionModelArrayList;
    private LabelDataSearch labelDataSearch;

    public SectionRecyclerViewAdapter(Context applicationContext, List<SectionModel> dataLists, LabelDataSearch labelDataSearchClass) {
        this.context = applicationContext;
        this.sectionModelArrayList = dataLists;
        this.labelDataSearch=labelDataSearchClass;

    }

    @Override
    public SectionViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.section_custom_row_layout, parent, false);
        return new SectionViewHolder(view);
    }

    @Override
    public void onBindViewHolder(SectionViewHolder holder, int position) {
        final SectionModel sectionModel = sectionModelArrayList.get(position);
        if(sectionModel.itemArrayList.size()>0) {
            holder.sectionLabel.setVisibility(View.VISIBLE);
            holder.sectionLabel.setText(sectionModel.sectionLabel);
        }
        else {
            holder.sectionLabel.setVisibility(View.VISIBLE);
            holder.sectionLabel.setText(sectionModel.sectionLabel+"\n No Results");
        }

        //recycler view for items
        holder.itemRecyclerView.setHasFixedSize(true);
        holder.itemRecyclerView.setNestedScrollingEnabled(false);

        LinearLayoutManager linearLayoutManager = new LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false);
        holder.itemRecyclerView.setLayoutManager(linearLayoutManager);

        ImageListAdapter adapter = new ImageListAdapter(context, sectionModel.itemArrayList,new ImageListAdapter.OnItemClickListener(){
            @Override
            public void onItemClick(LabelDataList item, int position) {
                labelDataSearch.performAction(item.pageurl);

            }
        });
        holder.itemRecyclerView.setAdapter(adapter);

    }

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


}

ImageListAdapter for description

public class ImageListAdapter extends RecyclerView.Adapter<ImageListAdapter.MyViewHolder> {

    List<LabelDataList> dataLists;
    private OnItemClickListener listener;
    private Context ctx;
    public static int sCorner = 15;
    public static int sMargin = 2;
    public static int sBorder = 10;
    public static String sColor = "#7D9067";

    public ImageListAdapter(Context context, ArrayList<LabelDataList> itemArrayList, OnItemClickListener onItemClickListener) {
        this.dataLists = itemArrayList;
        this.listener = onItemClickListener;
        this.ctx = context;
    }

    public interface OnItemClickListener {
        void onItemClick(LabelDataList item, int position);
    }

    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.row_lebel, parent, false);
        return new MyViewHolder(v);
    }


    @Override
    public void onBindViewHolder(final MyViewHolder holder, final int position) {
        holder.bind(dataLists.get(position), listener, position);
        final LabelDataList labelData = dataLists.get(position);
       // Your views include check box and text view or radio buttons
    }

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

    /**
     * View holder class
     */
    public class MyViewHolder extends RecyclerView.ViewHolder {

        private final TextView tvCategory;
        public TextView tvLabel;
        public RelativeLayout relTopLayout;
        public ImageView imgProduct;

        public MyViewHolder(View child) {
            super(child);
            tvLabel = (TextView) child.findViewById(R.id.tv_label);
            tvCategory = (TextView) child.findViewById(R.id.tv_category);
            imgProduct = (ImageView) child.findViewById(R.id.img_product);
            //    relTopLayout = (RelativeLayout) child.findViewById(R.id.rel_top_layout);
        }

        public void bind(final LabelDataList item, final OnItemClickListener listener, final int position) {
            itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    listener.onItemClick(item, position);
                }
            });
        }
    }
}

Hope it help you.

Praveen Rawat
  • 314
  • 1
  • 3
  • 14