排序列表视图(比较器)与 ArrayAdapter, Android.



我正在编写程序,它将向用户显示手机上安装的所有应用程序。

每个应用都有名称、图标和评级。我在课堂上都有。

我在OnCreate中拥有什么

protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        String temp = "";
        ArrayList<PInfo> list = new ArrayList<PInfo>();
        ListView listview = (ListView) findViewById(R.id.listView);
        List<PackageInfo> packages = 
getPackageManager().getInstalledPackages(PackageManager.GET_META_DATA);

    for (int i = 0; i < packages.size(); ++i)
    {
        temp = packages.get(i).packageName;
        ApplicationInfo ai;
        try
        {
            ai = 
getPackageManager().getApplicationInfo(this.getPackageName(), 0);
                list.add(new PInfo(temp,
                    packages.get(i).applicationInfo.loadLabel(getPackageManager()).toString(),
                    getPackageManager().getApplicationIcon(temp), 0));
        } catch (PackageManager.NameNotFoundException e)
        {
            e.printStackTrace();
        }
    }
    final BuggedAdapter adapter = new BuggedAdapter(this, android.R.layout.simple_list_item_1, list);
    listview.setAdapter(adapter);
}

因此,我创建并用信息填充我的列表视图。

然后我想按字母顺序或按评级对我的列表进行排序。

按字母顺序排列,它工作得很好,但是在评级方面我有问题。它按评级排序,但只是列表的一部分。只有在我上下滚动之后,它才会对所有列表进行排序。

这就是我排序的方式

public class RAT_DOWN implements Comparator<PInfo>
    {
        public int compare(PInfo left, PInfo right)
        {
            float change1 = left.rating;
            float change2 = right.rating;
            if (change1 < change2) return -1;
            if (change1 > change2) return 1;
            return 0;
        }
    }

以及我如何在我的应用程序中使用它

Collections.sort(list, new RAT_DOWN());
adapter.notifyDataSetChanged();

为什么它适用于字母排序,但评级排序存在这个小问题?

排序评级

 public class RAT_DOWN implements Comparator<PInfo>
 {
            public int compare(PInfo left, PInfo right)
            {
                float change1 = left.rating;
                float change2 = right.rating;
                return change1.compareTo(change2);
            }
  }

按字母顺序排序并评级:

public int compare(PInfo left, PInfo right)
{
    float change1 = left.rating;
    float change2 = right.rating;
    String leftName = left.name;
    String rightName = right.name;
    int nameComparator = leftName.compareTo(rightName);
    int comparable = valueWeekDay;
    if (comparable == 0) {
        comparable = change1compareTo(change2);
    }
    return comparable;
}

对自定义类进行排序并尝试此代码,

public class RAT_DOWN implements Comparator<PInfo>
{
    public int compare(PInfo left, PInfo right)
    {
        float change1 = left.rating;
        float change2 = right.rating;
        if (change1 != null && change2 != null) {
            return Float.compare(change1, change2);
        }
        return 0;
    }
}

我希望您的解决方案:)

最新更新