Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I implement a Material Design Expand/Collapse List on Android?

I am looking to implement a material list of this style. How can I do this on Android? What classes should I look at? Are there any existing libraries that could make implementing this easy?

Material Design Expand/Collapse List

like image 720
ZakTaccardi Avatar asked Feb 08 '15 00:02

ZakTaccardi


People also ask

Does Android use material design?

Material design in Android is one of the key features that attracts and engages the customer towards the application. This is a special type of design, which is guided by Google.

What is expanded panel?

An expansion panel is a lightweight container that may either stand alone or be connected to a larger surface, such as a card. They may be used for a variety of tasks, such as: To edit a setting. To create a tool for ad campaigns.

What are material design guidelines Android?

Material design is a comprehensive guide for visual, motion, and interaction design across platforms and devices. To use material design in your Android apps, follow the guidelines defined in the material design specification and use the new components and styles available in the material design support library.


1 Answers

Yes, you can easily implement it with the library SectionedRecyclerViewAdapter. There is a full working example here.

Basically you create a section class:

class MySection extends StatelessSection {      String title;     List<String> list;     boolean expanded = true; // true if you want it to be displayed expanded initially      public MySection(String title, List<String> list) {         // call constructor with layout resources for this Section header, footer and items          super(R.layout.section_header, R.layout.section_item);          this.title = title;         this.list = list;     }      @Override     public int getContentItemsTotal() {         return expanded? list.size() : 0;     }      @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));     }      @Override     public RecyclerView.ViewHolder getHeaderViewHolder(View view) {         return new SimpleHeaderViewHolder(view);     }      @Override     public void onBindHeaderViewHolder(RecyclerView.ViewHolder holder) {         MyHeaderViewHolder headerHolder = (MyHeaderViewHolder) holder;          // bind your header view here         headerHolder.tvItem.setText(title);          // handles the click on the header to toggle the expanded variable         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();             }         });     } } 

Then you set up the RecyclerView with your sections:

// Create an instance of SectionedRecyclerViewAdapter  SectionedRecyclerViewAdapter sectionAdapter = new SectionedRecyclerViewAdapter();  // Create your sections with the list of data for each topic MySection topic1Section = new MySection("Attractions", attractionsList); MySection topic2Section = new MySection("Dining", diningList);  // Add your Sections to the adapter sectionAdapter.addSection(topic1Section); sectionAdapter.addSection(topic2Section);  // Set up your RecyclerView with the SectionedRecyclerViewAdapter RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recyclerview); recyclerView.setLayoutManager(new LinearLayoutManager(getContext())); recyclerView.setAdapter(sectionAdapter); 
like image 157
Gustavo Avatar answered Sep 22 '22 12:09

Gustavo