我有联系人列表,必须在每个字母表下按字母显示,如图所示
如何在RecyclerView中执行此操作,请提出解决方案.谢谢
这就是我跟随@ divers的帖子所做的事情:
正如他所提到的,我将团队列表传递给已排序的适配器,并在下一个名称之前添加字母表.
这是他用来设置适配器的代码
void updateUI(ArrayListteamMembers) { adapter = new TeamMemberActivityAdapter(this, addAlphabets(sortList(teamMembers))); recList.setAdapter(adapter); recList.setVisibility(View.VISIBLE); spinningProgressView.setVisibility(View.GONE); }
用于对从服务器获得的团队列表进行排序的代码如下:
ArrayListsortList(ArrayList list) { Collections.sort(list, new Comparator () { @Override public int compare(TeamMember teamMember1, TeamMember teamMember2) { return teamMember1.getFullname().compareTo(teamMember2.getFullname()); } }); return list; }
在向列表中添加字母时,我设置了一个类型值,以便知道它的字母或团队名称是否在适配器内部检查以显示相应的布局.其代码如下所示:
ArrayListaddAlphabets(ArrayList list) { int i = 0; ArrayList customList = new ArrayList (); TeamMember firstMember = new TeamMember(); firstMember.setFullname(String.valueOf(list.get(0).getFullname().charAt(0))); firstMember.setType(1); customList.add(firstMember); for (i = 0; i < list.size() - 1; i++) { TeamMember teamMember = new TeamMember(); char name1 = list.get(i).getFullname().charAt(0); char name2 = list.get(i + 1).getFullname().charAt(0); if (name1 == name2) { list.get(i).setType(2); customList.add(list.get(i)); } else { list.get(i).setType(2); customList.add(list.get(i)); teamMember.setFullname(String.valueOf(name2)); teamMember.setType(1); customList.add(teamMember); } } list.get(i).setType(2); customList.add(list.get(i)); return customList; }
最后在适配器内部检查项目是否为teamMember名称或字母,并显示相应的布局,如下所示:
@Override public int getItemViewType(int position) { int viewType = 0; if (mMembers.get(position).getType() == TYPE_LETTER) { viewType = TYPE_LETTER; } else if (mMembers.get(position).getType() == TYPE_MEMBER) { viewType = TYPE_MEMBER; } return viewType; } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) { LayoutInflater mInflater = LayoutInflater.from(viewGroup.getContext()); switch (viewType) { case TYPE_LETTER: ViewGroup vGroupImage = (ViewGroup) mInflater.inflate(R.layout.board_team_letter_item, viewGroup, false); ViewHolderLetter image = new ViewHolderLetter(vGroupImage); return image; case TYPE_MEMBER: ViewGroup vGroupText = (ViewGroup) mInflater.inflate(R.layout.board_team_member_item, viewGroup, false); ViewHolderMember text = new ViewHolderMember(vGroupText); return text; default: ViewGroup vGroupText2 = (ViewGroup) mInflater.inflate(R.layout.board_team_member_item, viewGroup, false); ViewHolderMember text1 = new ViewHolderMember(vGroupText2); return text1; } }
希望这可以帮到你.祝一切顺利
按名称对数据进行排序
通过列表与数据迭代,并在当前的项目第一个字母!=下一个项目的第一个字母的位置,插入特殊种类的对象.
在Adapter
项目为"特殊"时,在您的地方特殊视图内.
我正在使用这个.它很容易实现,与RecyclerView适配器兼容,而且轻量级你几乎称它为库!