使用 ArrayAdapter 对列表视图(比较器)进行排序,Android

Sorting listview(comparator) with ArrayAdapter, Android

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

每个应用程序都有名称、图标和评级。我在 class PInfo.

里都有

我在 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;
}

正在对您的自定义排序 class 并尝试此代码,

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;
    }
}

我希望你有解决方案:)