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 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.
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.
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.
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);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With