Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import android.text.TextUtils;
- import android.view.LayoutInflater;
- import android.view.ViewGroup;
- import androidx.annotation.NonNull;
- import androidx.recyclerview.widget.DiffUtil;
- import androidx.recyclerview.widget.ListAdapter;
- import androidx.recyclerview.widget.RecyclerView;
- import org.jetbrains.annotations.NotNull;
- import java.util.ArrayList;
- import java.util.List;
- import ua.com.adama.R;
- import ua.com.adama.database.model.Contact;
- import ua.com.adama.fragment.contacts.listmodels.ContactListItem;
- import ua.com.adama.fragment.contacts.listmodels.ContactListModel;
- import ua.com.adama.fragment.contacts.listmodels.RegionListItem;
- public class ContactListAdapter extends ListAdapter<ContactListModel, ContactListViewHolder> {
- private OnRegionClickedListener onRegionClickedListener;
- // private List<ContactListModel> items = new ArrayList<>();
- public ContactListAdapter(OnRegionClickedListener onRegionClickedListener) {
- super(new ContactListAdapterDiffUtil());
- this.onRegionClickedListener = onRegionClickedListener;
- }
- @Override
- public int getItemViewType(int position) {
- return getItem(position).getType().getId();
- }
- @NonNull
- @Override
- public ContactListViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
- final LayoutInflater inflater = LayoutInflater.from(parent.getContext());
- switch (viewType) {
- case 0: return inflateRegionItemViewHolder(inflater, parent);
- case 1: return inflateContactItemViewHolder(inflater, parent);
- }
- throw new IllegalArgumentException("Cannot create instance of ContactListViewHolder for viewType=" + viewType);
- }
- private RegionItemViewHolder inflateRegionItemViewHolder(LayoutInflater inflater, @NotNull ViewGroup parent) {
- return new RegionItemViewHolder(
- inflater.inflate(R.layout.item_expandable_region_header, parent, false),
- onRegionClickedListener
- );
- }
- private ContactItemViewHolder inflateContactItemViewHolder(LayoutInflater inflater, @NotNull ViewGroup parent) {
- return new ContactItemViewHolder(
- inflater.inflate(R.layout.item_expandable_contact, parent, false)
- );
- }
- // public void submitList(List<ContactListModel> items) {
- // boolean needToNotify = this.items.isEmpty() && !items.isEmpty();
- // this.items.clear();
- // this.items.addAll(items);
- // if (needToNotify) {
- // notifyDataSetChanged();
- // }
- // }
- @Override
- public void onBindViewHolder(@NonNull ContactListViewHolder holder, int position) {
- holder.bind(getItem(position));
- }
- private static class ContactListAdapterDiffUtil extends DiffUtil.ItemCallback<ContactListModel> {
- @Override
- public boolean areItemsTheSame(@NonNull ContactListModel oldItem, @NonNull ContactListModel newItem) {
- if (oldItem instanceof RegionListItem && newItem instanceof RegionListItem) {
- final RegionListItem item1 = ((RegionListItem) oldItem);
- final RegionListItem item2 = ((RegionListItem) newItem);
- return item1.getRegion().getId() == item2.getRegion().getId();
- } else if (oldItem instanceof ContactListItem && newItem instanceof ContactListItem) {
- final Contact item1 = (((ContactListItem) oldItem).getContact());
- final Contact item2 = (((ContactListItem) newItem).getContact());
- return item1.getId() == item2.getId();
- }
- return false;
- }
- @Override
- public boolean areContentsTheSame(@NonNull ContactListModel oldItem, @NonNull ContactListModel newItem) {
- if (oldItem instanceof RegionListItem && newItem instanceof RegionListItem) {
- final RegionListItem item1 = ((RegionListItem) oldItem);
- final RegionListItem item2 = ((RegionListItem) newItem);
- return item1.isOpened() == item2.isOpened() && item1.getRegion().getName().equals(item2.getRegion().getName());
- } else if (oldItem instanceof ContactListItem && newItem instanceof ContactListItem) {
- final Contact item1 = (((ContactListItem) oldItem).getContact());
- final Contact item2 = (((ContactListItem) newItem).getContact());
- return TextUtils.equals(item1.getName_fam(), item2.getName_fam())
- && TextUtils.equals(item1.getAdress(), item2.getAdress())
- && TextUtils.equals(item1.getEmail(), item2.getEmail())
- && TextUtils.equals(item1.getPosition(), item2.getPosition())
- && TextUtils.equals(item1.getTelefon(), item2.getTelefon());
- }
- return false;
- }
- }
- public interface OnRegionClickedListener {
- void onClicked(int position);
- }
- }
- //IN FRAGMENT
- contactsController.itemsLiveData.observe(getViewLifecycleOwner(), contactListModels -> {
- adapter.submitList(new ArrayList<>(contactListModels));
- });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement