Не могу поставить сепаратор при связывании взглядов - PullRequest
0 голосов
/ 28 апреля 2019

Я создаю приложение для вызывающих абонентов, которое имеет страницу контактов Контакты, которые я получаю, используют курсор и используют этот курсор в 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;
    }
}

1 Ответ

0 голосов
/ 29 апреля 2019

Две вещи - getItemCount и getItemViewType.

getItemCount - должен возвращать общее количество элементов (без контактов + без разделителей). Напишите некоторую логику, чтобы найти это (вычислите общее количество различных начальных букв, вычтите на 1, получите количество разделителей)

getItemViewType - Здесь вы должны проверить, должен ли это быть контакт или разделитель, и отправить этот тип. (Получить предыдущее и проверить первую букву)

Но нужно быть осторожным с логикой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...