Advertisement
Guest User

Untitled

a guest
Sep 1st, 2020
30
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.14 KB | None | 0 0
  1.  
  2.  
  3. import android.text.TextUtils;
  4. import android.view.LayoutInflater;
  5. import android.view.ViewGroup;
  6.  
  7. import androidx.annotation.NonNull;
  8. import androidx.recyclerview.widget.DiffUtil;
  9. import androidx.recyclerview.widget.ListAdapter;
  10. import androidx.recyclerview.widget.RecyclerView;
  11.  
  12. import org.jetbrains.annotations.NotNull;
  13.  
  14. import java.util.ArrayList;
  15. import java.util.List;
  16.  
  17. import ua.com.adama.R;
  18. import ua.com.adama.database.model.Contact;
  19. import ua.com.adama.fragment.contacts.listmodels.ContactListItem;
  20. import ua.com.adama.fragment.contacts.listmodels.ContactListModel;
  21. import ua.com.adama.fragment.contacts.listmodels.RegionListItem;
  22.  
  23. public class ContactListAdapter extends ListAdapter<ContactListModel, ContactListViewHolder> {
  24.  
  25. private OnRegionClickedListener onRegionClickedListener;
  26. // private List<ContactListModel> items = new ArrayList<>();
  27.  
  28. public ContactListAdapter(OnRegionClickedListener onRegionClickedListener) {
  29. super(new ContactListAdapterDiffUtil());
  30. this.onRegionClickedListener = onRegionClickedListener;
  31. }
  32.  
  33. @Override
  34. public int getItemViewType(int position) {
  35. return getItem(position).getType().getId();
  36. }
  37.  
  38.  
  39. @NonNull
  40. @Override
  41. public ContactListViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
  42. final LayoutInflater inflater = LayoutInflater.from(parent.getContext());
  43. switch (viewType) {
  44. case 0: return inflateRegionItemViewHolder(inflater, parent);
  45. case 1: return inflateContactItemViewHolder(inflater, parent);
  46. }
  47. throw new IllegalArgumentException("Cannot create instance of ContactListViewHolder for viewType=" + viewType);
  48. }
  49.  
  50. private RegionItemViewHolder inflateRegionItemViewHolder(LayoutInflater inflater, @NotNull ViewGroup parent) {
  51. return new RegionItemViewHolder(
  52. inflater.inflate(R.layout.item_expandable_region_header, parent, false),
  53. onRegionClickedListener
  54. );
  55. }
  56.  
  57. private ContactItemViewHolder inflateContactItemViewHolder(LayoutInflater inflater, @NotNull ViewGroup parent) {
  58. return new ContactItemViewHolder(
  59. inflater.inflate(R.layout.item_expandable_contact, parent, false)
  60. );
  61. }
  62.  
  63. // public void submitList(List<ContactListModel> items) {
  64. // boolean needToNotify = this.items.isEmpty() && !items.isEmpty();
  65. // this.items.clear();
  66. // this.items.addAll(items);
  67. // if (needToNotify) {
  68. // notifyDataSetChanged();
  69. // }
  70. // }
  71.  
  72. @Override
  73. public void onBindViewHolder(@NonNull ContactListViewHolder holder, int position) {
  74. holder.bind(getItem(position));
  75. }
  76.  
  77. private static class ContactListAdapterDiffUtil extends DiffUtil.ItemCallback<ContactListModel> {
  78.  
  79. @Override
  80. public boolean areItemsTheSame(@NonNull ContactListModel oldItem, @NonNull ContactListModel newItem) {
  81. if (oldItem instanceof RegionListItem && newItem instanceof RegionListItem) {
  82. final RegionListItem item1 = ((RegionListItem) oldItem);
  83. final RegionListItem item2 = ((RegionListItem) newItem);
  84. return item1.getRegion().getId() == item2.getRegion().getId();
  85. } else if (oldItem instanceof ContactListItem && newItem instanceof ContactListItem) {
  86. final Contact item1 = (((ContactListItem) oldItem).getContact());
  87. final Contact item2 = (((ContactListItem) newItem).getContact());
  88. return item1.getId() == item2.getId();
  89. }
  90. return false;
  91. }
  92.  
  93. @Override
  94. public boolean areContentsTheSame(@NonNull ContactListModel oldItem, @NonNull ContactListModel newItem) {
  95. if (oldItem instanceof RegionListItem && newItem instanceof RegionListItem) {
  96. final RegionListItem item1 = ((RegionListItem) oldItem);
  97. final RegionListItem item2 = ((RegionListItem) newItem);
  98. return item1.isOpened() == item2.isOpened() && item1.getRegion().getName().equals(item2.getRegion().getName());
  99. } else if (oldItem instanceof ContactListItem && newItem instanceof ContactListItem) {
  100. final Contact item1 = (((ContactListItem) oldItem).getContact());
  101. final Contact item2 = (((ContactListItem) newItem).getContact());
  102. return TextUtils.equals(item1.getName_fam(), item2.getName_fam())
  103. && TextUtils.equals(item1.getAdress(), item2.getAdress())
  104. && TextUtils.equals(item1.getEmail(), item2.getEmail())
  105. && TextUtils.equals(item1.getPosition(), item2.getPosition())
  106. && TextUtils.equals(item1.getTelefon(), item2.getTelefon());
  107. }
  108. return false;
  109. }
  110. }
  111.  
  112. public interface OnRegionClickedListener {
  113. void onClicked(int position);
  114. }
  115.  
  116. }
  117.  
  118. //IN FRAGMENT
  119. contactsController.itemsLiveData.observe(getViewLifecycleOwner(), contactListModels -> {
  120. adapter.submitList(new ArrayList<>(contactListModels));
  121. });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement