如何按 android 中的数值列对列表视图项目进行排序
How to sort listview items by numeric values column in android
我有一个列表视图 lv,其中包含以下项目:
Hyda, 25.00
Bran, 11.75
Geda, 2.55
我想按第二列对项目进行排序,以便列表视图显示:
Geda, 2.55
Bran, 11.75
Hyda, 25.00
我在下面使用的代码仅按第一列排序;即 returns:
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 User {
String name;
double score;
User(String name, double score) {
this.name = name;
this.score = score;
}
}
主要活动
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button sortButton = findViewById(R.id.sortButton);
ListView lv = findViewById(R.id.lvData);
List<User> data = new ArrayList<>();
data.add(new User("Bran", 11.75));
data.add(new User("Geda", 2.55));
data.add(new User("Hyda", 25.00));
final UsersAdapter adapter = new UsersAdapter(this, data);
lv.setAdapter(adapter);
sortButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
adapter.sortLvData();
}
});
}
}
自定义适配器class
class UsersAdapter extends ArrayAdapter<User> {
UsersAdapter(@NonNull Context context, List<User> users) {
super(context, 0, users);
}
void sortLvData() {
sort(new Comparator<User>() {
@Override
public int compare(User u1, User u2) {
return Double.compare(u1.score, u2.score);
}
});
}
@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
User user = getItem(position);
if (convertView == null) {
//you can even use your custom XML layout to better display the UI.
convertView = LayoutInflater.from(getContext()).inflate(android.R.layout.simple_list_item_1, parent, false);
}
String text = user.name + ", " + user.score;
((TextView) convertView).setText(text);
return convertView;
}
}
我有一个列表视图 lv,其中包含以下项目:
Hyda, 25.00
Bran, 11.75
Geda, 2.55
我想按第二列对项目进行排序,以便列表视图显示:
Geda, 2.55
Bran, 11.75
Hyda, 25.00
我在下面使用的代码仅按第一列排序;即 returns:
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 User {
String name;
double score;
User(String name, double score) {
this.name = name;
this.score = score;
}
}
主要活动
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button sortButton = findViewById(R.id.sortButton);
ListView lv = findViewById(R.id.lvData);
List<User> data = new ArrayList<>();
data.add(new User("Bran", 11.75));
data.add(new User("Geda", 2.55));
data.add(new User("Hyda", 25.00));
final UsersAdapter adapter = new UsersAdapter(this, data);
lv.setAdapter(adapter);
sortButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
adapter.sortLvData();
}
});
}
}
自定义适配器class
class UsersAdapter extends ArrayAdapter<User> {
UsersAdapter(@NonNull Context context, List<User> users) {
super(context, 0, users);
}
void sortLvData() {
sort(new Comparator<User>() {
@Override
public int compare(User u1, User u2) {
return Double.compare(u1.score, u2.score);
}
});
}
@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
User user = getItem(position);
if (convertView == null) {
//you can even use your custom XML layout to better display the UI.
convertView = LayoutInflater.from(getContext()).inflate(android.R.layout.simple_list_item_1, parent, false);
}
String text = user.name + ", " + user.score;
((TextView) convertView).setText(text);
return convertView;
}
}