当前位置:  开发笔记 > 编程语言 > 正文

显示名称列表在Recyclerview下的每个字母下按字母顺序Android

如何解决《显示名称列表在Recyclerview下的每个字母下按字母顺序Android》经验,为你挑选了3个好方法。

我有联系人列表,必须在每个字母表下按字母显示,如图所示要求的答案

如何在RecyclerView中执行此操作,请提出解决方案.谢谢



1> Nabeel K..:

这就是我跟随@ divers的帖子所做的事情:

正如他所提到的,我将团队列表传递给已排序的适配器,并在下一个名称之前添加字母表.

这是他用来设置适配器的代码

void updateUI(ArrayList teamMembers) {



        adapter = new TeamMemberActivityAdapter(this, addAlphabets(sortList(teamMembers)));
        recList.setAdapter(adapter);
        recList.setVisibility(View.VISIBLE);
        spinningProgressView.setVisibility(View.GONE);
    } 

用于对从服务器获得的团队列表进行排序的代码如下:

 ArrayList sortList(ArrayList list) {
        Collections.sort(list, new Comparator() {
            @Override
            public int compare(TeamMember teamMember1, TeamMember teamMember2) {
                return teamMember1.getFullname().compareTo(teamMember2.getFullname());
            }
        });
        return list;
    }

在向列表中添加字母时,我设置了一个类型值,以便知道它的字母或团队名称是否在适配器内部检查以显示相应的布局.其代码如下所示:

ArrayList addAlphabets(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;

        }
    }

希望这可以帮到你.祝一切顺利



2> Divers..:

    按名称对数据进行排序

    通过列表与数据迭代,并在当前的项目第一个字母!=下一个项目的第一个字母的位置,插入特殊种类的对象.

    Adapter项目为"特殊"时,在您的地方特殊视图内.



3> Jelle Blaauw..:

我正在使用这个.它很容易实现,与RecyclerView适配器兼容,而且轻量级你几乎称它为库!

推荐阅读
保佑欣疼你的芯疼
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有