绑定视图时不能放置分隔符

时间:2019-04-28 14:44:28

标签: java android android-recyclerview

我正在构建一个带有联系人页面的呼叫者应用 我正在使用游标并在 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 :(得分:0)

两件事-getItemCount和getItemViewType。

getItemCount-它应该返回所有项目(联系人总数+分隔符总数)。 编写一些逻辑来找到它。(计算不同的起始字母总数,用1减去,得到分隔符计数)

getItemViewType-在这里,您应该验证它是联系人还是分隔符,并发送这些类型。(获取前一个并检查第一个字母)

但是,需要谨慎对待逻辑。