【问题标题】:How to rearrange items in a list view according to their priority?如何根据优先级重新排列列表视图中的项目?
【发布时间】:2021-10-05 02:18:24
【问题描述】:

我正在开发一个任务应用程序,我正在尝试设置一个列表视图。现在,我有点初学者,所以我想问你如何将我的想法实现为代码......

用户输入任务,并告诉我各个任务的优先级和花费的时间。现在,一旦用户输入所有数据,我想编写代码,按照优先级降低和时间增加的顺序重新排列所有数据。例如,一个具有高优先级但花费较少时间的任务必须列在第一位,依此类推……我尝试使用列表项的索引来做一些事情,但效果不佳。有什么办法可以解决这个问题吗?谢谢。

【问题讨论】:

  • 如果您对列表的数据集进行排序,那么列表应该/将被更新。你试过什么,代码是什么?你看到了什么行为?
  • 我尝试使用大量 if-else 语句...例如,如果(优先级高),然后是它的组合...但是我自己查看所有可能的组合是不可能的,因为大约有 3 ! em
  • 这是一个编程站点,因此,我们希望能够看到您的代码以提供帮助。你累了什么?使用 Comparator 进行比较,对数据集进行排序似乎就足够了
  • @Bonatti 是的,我明白了。我能够做到。我没有使用优先队列,比较器工作得很好。我创建了一个自定义的...我现在将发布答案

标签: java android listview


【解决方案1】:

你不需要写那样的东西。查看PriorityQueue,它就是这样做的:

该类实现了Iterator 接口,因此如果您不仅需要列表中最重要的元素,您还可以访问特定元素。

如果您需要更复杂的优先级比较,您可以使用自定义 compare 方法实现 Comparator

这应该提供您需要的所有功能。

【讨论】:

  • 对。我想我会尝试 Priority queue ,因为它与我想要的非常匹配
【解决方案2】:

使用自定义比较器效果很好。我想出了一个简单的算法,它涉及将简单的整数(如 10、9 和 8)分别分配给优先级高、中和低,并将 1、2 和 3 分配给时间。比较器只是从优先级中减去时间并将其用作比较参数。效果很好。这是比较器类的代码:

package com.example.taskmasterv3;

import java.util.Comparator;

public class TaskComparator implements Comparator<SubtaskPartTwo> {

    public int compare(SubtaskPartTwo s1, SubtaskPartTwo s2){

        int a = s1.getPri() - s1.getTime();
        int b = s2.getPri() - s2.getTime();
        int x = s1.getPri();
        int y = s2.getPri();

        if (b == a){

            return y-x;

        }
        else {
            return b-a;
        }

    }
}

在 List Adapter 类中使用以下代码行使其工作:

// THIS IS WHERE I USE SORT
        Collections.sort(values, new TaskComparator());

【讨论】:

    【解决方案3】:

    想出一个执行排序的公式,例如

    (((p / 2) * 100) * p)  + ((t / 2) * 100) * t) 
    
    • p - 优先级
    • t - 时间

    在示例中,优先级和时间具有相同的权重。

    【讨论】:

    • 不确定我能否正确理解公式...,抱歉。
    猜你喜欢
    • 2016-03-14
    • 2014-08-05
    • 1970-01-01
    • 2022-09-28
    • 2022-01-21
    • 2015-05-04
    • 2012-02-24
    • 1970-01-01
    • 2016-05-23
    相关资源
    最近更新 更多