如何按 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;
    }
}