package io.github.luizgrp.sectionedrecyclerviewadapter.demo.example7; import android.text.TextUtils; import android.view.View; import java.util.ArrayList; import java.util.List; import java.util.Locale; import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; import io.github.luizgrp.sectionedrecyclerviewadapter.Section; import io.github.luizgrp.sectionedrecyclerviewadapter.SectionParameters; import io.github.luizgrp.sectionedrecyclerviewadapter.demo.R; class ContactsSection extends Section implements FilterableSection { private final String title; private final List<Contact> list; private final ClickListener clickListener; private final List<Contact> filteredList; ContactsSection(final String title, final List<Contact> list, final ClickListener clickListener) { super(SectionParameters.builder() .itemResourceId(R.layout.section_ex7_item) .headerResourceId(R.layout.section_ex7_header) .build()); this.title = title; this.list = list; this.clickListener = clickListener; this.filteredList = new ArrayList<>(list); } @Override public int getContentItemsTotal() { return filteredList.size(); } @Override public RecyclerView.ViewHolder getItemViewHolder(final View view) { return new ItemViewHolder(view); } @Override public void onBindItemViewHolder(final RecyclerView.ViewHolder holder, final int position) { final ItemViewHolder itemHolder = (ItemViewHolder) holder; final Contact contact = filteredList.get(position); itemHolder.tvItem.setText(contact.name); itemHolder.imgItem.setImageResource(contact.profileImage); itemHolder.rootView.setOnClickListener(v -> clickListener.onItemRootViewClicked(this, itemHolder.getAdapterPosition()) ); } @Override public RecyclerView.ViewHolder getHeaderViewHolder(final View view) { return new HeaderViewHolder(view); } @Override public void onBindHeaderViewHolder(final RecyclerView.ViewHolder holder) { final HeaderViewHolder headerHolder = (HeaderViewHolder) holder; headerHolder.tvTitle.setText(title); } @Override public void filter(@NonNull final String query) { if (TextUtils.isEmpty(query)) { filteredList.clear(); filteredList.addAll(list); this.setVisible(true); } else { filteredList.clear(); for (final Contact contact : list) { if (contact.name.toLowerCase(Locale.getDefault()) .contains(query.toLowerCase(Locale.getDefault()))) { filteredList.add(contact); } } this.setVisible(!filteredList.isEmpty()); } } interface ClickListener { void onItemRootViewClicked(@NonNull final ContactsSection section, final int itemAdapterPosition); } }