我正在编写程序,它将向用户显示手机上安装的所有应用程序。
每个应用都有名称、图标和评级。我在课堂上都有。
我在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;
}
}
我希望您的解决方案:)