草庐IT

java - 如何正确排序recyclerView

coder 2023-12-16 原文

我创建了一个recyclerView(参见这张图片)

但我没有得到我想要的结果。我需要得到这个:

你看我已经对职业进行了分组,所有职业都有自己的图标。所以我现在将包含我的 recyclerView 代码。我怎样才能像图像一样?如果我做错了什么,请告诉我,不要投反对票。

这是项目类。

public class Rec_Items {

    private int image;
    private String fullName;
    private String profession;

    public Rec_Items(int image, String fullName, String profession) {
        this.image = image;
        this.fullName = fullName;
        this.profession = profession;
    }

    public int getImage() {
        return image;
    }

    public String getFullName() {
        return fullName;
    }

    public String getProfession() {
        return profession;
    }
}

现在这里是适配器,它是ViewHolder

public class SupportersAdapter extends RecyclerView.Adapter<SupportersAdapter.MyViewHolder> {

    Context context;
    List<Supporters_item> list = new ArrayList<>();

    public SupportersAdapter(Context context, List<Supporters_item> list) {
        this.context = context;
        this.list = list;
    }


    @Override
    public SupportersAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View v;
        v = LayoutInflater.from(context).inflate(R.layout.supporters_view_item, parent, false);
        MyViewHolder holder = new MyViewHolder(v);
        return holder;
    }

    @Override
    public void onBindViewHolder(SupportersAdapter.MyViewHolder holder, int position) {
        holder.imageView.setImageResource(list.get(position).getImage());
        holder.fullName.setText(list.get(position).getFullName());
        holder.profession.setText(list.get(position).getProfession());

        if (list.get(position).getProfession().equals("Actress")) {
            holder.icon.setImageResource(R.drawable.medical);
        }
        if (list.get(position).getProfession().equals("Builder")) {
            holder.icon.setImageResource(R.drawable.builderkey);
        }
        if (list.get(position).getProfession().equals("Designer")) {
            holder.icon.setImageResource(R.drawable.shopping);
        }
        if (list.get(position).getProfession().equals("Programmer")) {
            holder.icon.setImageResource(R.drawable.education);
        }

        if (position > 0) {
            if (!list.get(position).getProfession().substring(0,1).equals(list.get(position-1).getProfession().substring(0, 1))) {
                holder.view.setVisibility(View.VISIBLE);
                holder.icon.setVisibility(View.VISIBLE);
            }
        }

    }

    @Override
    public int getItemCount() {
        return list.size();
    }

    public class MyViewHolder extends RecyclerView.ViewHolder {

        ImageView imageView, icon;
        TextView fullName, profession;
        View view;

        public MyViewHolder(View itemView) {
            super(itemView);

            imageView = (ImageView) itemView.findViewById(R.id.support_picture);
            fullName = (TextView) itemView.findViewById(R.id.fName);
            profession = (TextView) itemView.findViewById(R.id.profession);
            icon = (ImageView) itemView.findViewById(R.id.icon);
            view = itemView.findViewById(R.id.bottomLine);

        }
    }
}

我已经在 onBindViewHolder() 中完成了组部分,所以请注意,我得到的不是我想要的结果,我想要的是图像结果。

这是 MainActivity 类。

public class MainActivity extends AppCompatActivity {

    private List<Rec_Items> list;
    private RecyclerView recyclerView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        recyclerView = (RecyclerView) findViewById(R.id.supporters_recycler);
        add();
        Adapter adapter = new Adapter(this, list);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));
        recyclerView.setAdapter(adapter);

    }

    public void add(){
        list = new ArrayList<>();
        list.add(new Rec_Items(R.drawable.pfl_img, "Name Surname", "Actress"));
        list.add(new Rec_Items(R.drawable.pfl_img, "Name Surname", "Programmer"));
        list.add(new Rec_Items(R.drawable.pfl_img, "Name Surname", "Builder"));
        list.add(new Rec_Items(R.drawable.pfl_img, "Name Surname", "Designer"));
        list.add(new Rec_Items(R.drawable.pfl_img, "Name Surname", "Actress"));
        list.add(new Rec_Items(R.drawable.pfl_img, "Name Surname", "Programmer"));
        list.add(new Rec_Items(R.drawable.pfl_img, "Name Surname", "Builder"));
        list.add(new Rec_Items(R.drawable.pfl_img, "Name Surname", "Designer"));
    }
}

我如何修改我的代码,要更改什么以获得分组 recyclerView

最佳答案

在设置适配器之前,您可以按专业的字母顺序对列表进行排序:

List<Rec_Items> sortedList = new ArrayList();
if (list.size() > 0) {
    Collections.sort(list, new Comparator<Rec_Items>() {
        @Override
        public int compare(final Rec_Items object1, final Rec_Items object2) {
            return object1.getProfession().compareTo(object2.getProfession());
        }
    });
}

//                                  SORTED LIST
Adapter adapter = new Adapter(this, sortedList);

要在每个部分显示除数(线),您可以将其添加到 xml 设计中作为 gone android:visibility="gone" 并在上一个项目专业的首字母为时显示它与现在的不同:

//Inside onBindViewHolder method:
if(position > 0){
        // [----------------PREVIOUS ITEM-----------------]       [------------------CURRENT ITEM------------------]
    if(!list.get(position-1).getProfession().substring(0,1).equals(list.get(position).getProfession().substring(0,1))){
        //Example: holder.getDivisor().setVisibility(View.VISIBLE);
    }
}

对于图标部分,您可以使用相同的逻辑。让它隐藏在xml设计中,如果item是列表中的第一个,或者如果前一个item职业的首字母不同,即当前item是其section的第一个,则显示它。可以勾选职业名称设置对应的图片。

编码愉快!

关于java - 如何正确排序recyclerView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48872690/

有关java - 如何正确排序recyclerView的更多相关文章

  1. ruby - 如何使用 Nokogiri 的 xpath 和 at_xpath 方法 - 2

    我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div

  2. ruby - 如何从 ruby​​ 中的字符串运行任意对象方法? - 2

    总的来说,我对ruby​​还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用

  3. python - 如何使用 Ruby 或 Python 创建一系列高音调和低音调的蜂鸣声? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。

  4. ruby-on-rails - 如何验证 update_all 是否实际在 Rails 中更新 - 2

    给定这段代码defcreate@upgrades=User.update_all(["role=?","upgraded"],:id=>params[:upgrade])redirect_toadmin_upgrades_path,:notice=>"Successfullyupgradeduser."end我如何在该操作中实际验证它们是否已保存或未重定向到适当的页面和消息? 最佳答案 在Rails3中,update_all不返回任何有意义的信息,除了已更新的记录数(这可能取决于您的DBMS是否返回该信息)。http://ar.ru

  5. ruby-on-rails - 'compass watch' 是如何工作的/它是如何与 rails 一起使用的 - 2

    我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t

  6. ruby - 如何将脚本文件的末尾读取为数据文件(Perl 或任何其他语言) - 2

    我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚

  7. ruby - 如何指定 Rack 处理程序 - 2

    Rackup通过Rack的默认处理程序成功运行任何Rack应用程序。例如:classRackAppdefcall(environment)['200',{'Content-Type'=>'text/html'},["Helloworld"]]endendrunRackApp.new但是当最后一行更改为使用Rack的内置CGI处理程序时,rackup给出“NoMethodErrorat/undefinedmethod`call'fornil:NilClass”:Rack::Handler::CGI.runRackApp.newRack的其他内置处理程序也提出了同样的反对意见。例如Rack

  8. ruby - 如何每月在 Heroku 运行一次 Scheduler 插件? - 2

    在选择我想要运行操作的频率时,唯一的选项是“每天”、“每小时”和“每10分钟”。谢谢!我想为我的Rails3.1应用程序运行调度程序。 最佳答案 这不是一个优雅的解决方案,但您可以安排它每天运行,并在实际开始工作之前检查日期是否为当月的第一天。 关于ruby-如何每月在Heroku运行一次Scheduler插件?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/8692687/

  9. ruby-on-rails - 如何从 format.xml 中删除 <hash></hash> - 2

    我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为

  10. ruby - 如何使用文字标量样式在 YAML 中转储字符串? - 2

    我有一大串格式化数据(例如JSON),我想使用Psychinruby​​同时保留格式转储到YAML。基本上,我希望JSON使用literalstyle出现在YAML中:---json:|{"page":1,"results":["item","another"],"total_pages":0}但是,当我使用YAML.dump时,它不使用文字样式。我得到这样的东西:---json:!"{\n\"page\":1,\n\"results\":[\n\"item\",\"another\"\n],\n\"total_pages\":0\n}\n"我如何告诉Psych以想要的样式转储标量?解

随机推荐