我正在构建一个带有联系人页面的呼叫者应用 我正在使用游标并在 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;
}
}
答案 0 :(得分:0)
两件事-getItemCount和getItemViewType。
getItemCount-它应该返回所有项目(联系人总数+分隔符总数)。 编写一些逻辑来找到它。(计算不同的起始字母总数,用1减去,得到分隔符计数)
getItemViewType-在这里,您应该验证它是联系人还是分隔符,并发送这些类型。(获取前一个并检查第一个字母)
但是,需要谨慎对待逻辑。