Я создаю приложение для вызывающих абонентов, которое имеет страницу контактов
Контакты, которые я получаю, используют курсор и используют этот курсор в onBindViewHolder
Я хочу поставить разделитель между разными буквами контактов
проблема в том, что я не могу найти способ добавить «запуск» на onBindViewHolder , чтобы я надувал separatorHolder, а затем курсор возвращался в то же место, где был.
Я пытался использовать два разных типа просмотра, но так как я выбираю контакты с устройства с помощью курсора, у меня нет возможности добавить разделители к курсору.
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View v;
switch (viewType) {
case VIEW_TYPE_ITEM:
v = LayoutInflater.from(mContext).inflate(R.layout.item_contact, parent, false);
return new ContactHolder(v);
case VIEW_TYPE_SEPERATOR:
v = LayoutInflater.from(mContext).inflate(R.layout.item_separator, parent, false);
return new SeparatorHolder(v);
default:
v = LayoutInflater.from(mContext).inflate(R.layout.item_contact, parent, false);
return new ContactHolder(v);
}
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, Cursor cursor) {
switch (viewHolder.getItemViewType()) {
case VIEW_TYPE_ITEM:
ContactHolder contactHolder = (ContactHolder) viewHolder;
Contact contact = new Contact(cursor);
String contactName = contact.getName();
String contactNumber = contact.getMainPhoneNumber();
String formattedNumber =
Utilities.formatPhoneNumber(contactNumber);
contactHolder.name.setText(contactName);
contactHolder.number.setText(formattedNumber);
if (contact.getPhotoUri() == null) {
contactHolder.photo.setVisibility(View.GONE);
contactHolder.photoPlaceholder.setVisibility(View.VISIBLE);
} else {
contactHolder.photo.setVisibility(View.VISIBLE);
contactHolder.photoPlaceholder.setVisibility(View.GONE);
contactHolder.photo.setImageURI(Uri.parse(contact.getPhotoUri()));
}
if (mOnContactSelectedListener != null) {
contactHolder.itemView.setOnClickListener(v ->
mOnContactSelectedListener.onContactSelected(contactNumber));
}
break;
case VIEW_TYPE_SEPERATOR:
SeparatorHolder separatorHolder = (SeparatorHolder)
viewHolder;
separatorHolder.text.setText(separator);
break;
}
}