使用 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;
}
}
我希望你有解决方案:)
我正在编写程序,它将向用户显示他 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;
}
}
我希望你有解决方案:)