Creating an expandable RecyclerView

后端 未结 4 1378
旧巷少年郎
旧巷少年郎 2021-01-31 11:11

I\'m trying to implement a recyclerview that behaves like my sketch below:

The idea is that there is a parent list, when an list item in the parent list is tapp

4条回答
  •  时光说笑
    2021-01-31 11:34

    You can easily achieve it with this library, there is a full example here.

    Basically you group your items into sections:

    class MySection extends StatelessSection {
    
        String header;
        List list;
        boolean expanded = true;
    
        public MySection(String header, List list) {
            // call constructor with layout resources for this Section header and items 
            super(R.layout.section_header, R.layout.section_item);
            this.myHeader = header;
            this.myList = list;
        }
    
        @Override
        public int getContentItemsTotal() {
            return expanded? list.size() : 0;
        }
    
        @Override
        public RecyclerView.ViewHolder getHeaderViewHolder(View view) {
            return new HeaderViewHolder(view);
        }
    
        @Override
        public void onBindHeaderViewHolder(RecyclerView.ViewHolder holder) {
            final HeaderViewHolder headerHolder = (HeaderViewHolder) holder;
    
            headerHolder.tvTitle.setText(title);
    
            headerHolder.rootView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    expanded = !expanded;
                    headerHolder.imgArrow.setImageResource(
                            expanded ? R.drawable.ic_keyboard_arrow_up_black_18dp : R.drawable.ic_keyboard_arrow_down_black_18dp
                    );
                    sectionAdapter.notifyDataSetChanged();
                }
            });
        }
    
        @Override
        public RecyclerView.ViewHolder getItemViewHolder(View view) {
            // return a custom instance of ViewHolder for the items of this section
            return new MyItemViewHolder(view);
        }
    
        @Override
        public void onBindItemViewHolder(RecyclerView.ViewHolder holder, int position) {
            MyItemViewHolder itemHolder = (MyItemViewHolder) holder;
    
            // bind your view here
            itemHolder.tvItem.setText(list.get(position));
        }
    }
    

    Then create instance of your sections and set up your adapter:

    // Create an instance of SectionedRecyclerViewAdapter 
    SectionedRecyclerViewAdapter sectionAdapter = new SectionedRecyclerViewAdapter();
    
    // Add your Sections
    sectionAdapter.addSection(new MySection("A", Arrays.asList(new String[] {"a", "b", "c" })));
    sectionAdapter.addSection(new MySection("B", Arrays.asList(new String[] {"d", "e", "f" })));
    
    // Set up your RecyclerView with the SectionedRecyclerViewAdapter
    RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recyclerview);
    recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
    recyclerView.setAdapter(sectionAdapter);
    

提交回复
热议问题