我有一个带有以下项目的列表视图lv:
Hyda, 25.00
Bran, 11.75
Geda, 2.55
我想按第二列对项目进行排序,以便Listview显示:
Geda, 2.55
Bran, 11.75
Hyda, 25.00
我下面使用的代码仅按第一列排序;即它返回:
Bran, 11.75
Geda, 2.55
Hyda, 25.00
ArrayList<String> list = new ArrayList<>();
ArrayAdapter<String> adapter;
lv = rootView.findViewById(R.id.lvData);
adapter = new ArrayAdapter<String>(getContext(),android.R.layout.simple_list_item_1, list);
list.add("Hyda"+", "+"25.00");
list.add("Bran"+", "+"11.75");
list.add("Geda"+", "+"2.55");
lv.setAdapter(adapter);
btnSort = rootView.findViewById(R.id.sortButton);
btnSort.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Collections.sort(list,new myComparatorNumbers());
for (String i:list){
lv.setAdapter(adapter);
}
}
});
private class myComparatorNumbers implements Comparator<String> {
@Override
public int compare(String o1, String o2) {
return o1.compareTo(o2);
}
任何人都可以提供有关如何按第二列(即按数值)进行排序的帮助吗?我发现的大多数解决方案都集中在一个列数据数组上]
首先,我建议您创建一个自定义类,>]
class Person { String name; int score; }
然后您需要将代码更改为:
btnSort.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Collections.sort(list,new Comparator<Person>(){ @Override public int compare(Person p1, Person p2) { return p1.score - p2.score; } }; lv.setAdapter(new ArrayAdapter<String(getContext(),android.R.layout.simple_list_item_1, list)); } });
还需要对列表进行排序后创建新的适配器;