Android Studio中如何实现ListView按FCM数值降序排列
实现方案
你只需要修改3个文件的少量代码即可完成按FCM数值降序排序的需求:
步骤1:修改Atleta.java,新增FCM数值字段
你当前的Atleta类只存了拼接好的FCM字符串,不方便直接排序,我们新增一个int类型的字段单独存储FCM数值:
package br.ldkstudiosart.freqmax; public class Atleta { private String nome; private String idade; // 新增FCM数值字段,用于排序 private int fcm; public String getNome() { return nome; } public void setNome(String nome) { this.nome = nome; } public String getIdade() { return idade; } public void setIdade(String idade) { this.idade = idade; } // 新增fcm的get、set方法 public int getFcm() { return fcm; } public void setFcm(int fcm) { this.fcm = fcm; } @Override public String toString() { return "Nome: " + nome + " Idade: " + idade; } }
步骤2:修改MainActivity.java,添加数据后执行排序
首先先导入需要的工具类:
import java.util.Collections; import java.util.Comparator;
然后修改processarCliqueAdicionarCalcular方法,在添加新的Atleta对象到列表后,对整个列表按fcm字段降序排序,再通知适配器刷新:
public void processarCliqueAdicionarCalcular(View v) { Atleta a = new Atleta(); a.setNome(txtNome.getText().toString()); int soma = Integer.valueOf(txtIdade.getText().toString()); int total = 220 - soma; a.setIdade(String.valueOf("FCM: " + total)); // 把计算得到的FCM数值存到新增的字段里 a.setFcm(total); atletas.add(a); // 新增排序逻辑:按fcm数值降序排列 Collections.sort(atletas, new Comparator<Atleta>() { @Override public int compare(Atleta o1, Atleta o2) { // 降序排序返回后者减前者,升序的话反过来即可 return o2.getFcm() - o1.getFcm(); } }); // 如果你使用Java 8及以上版本,可以用lambda简化排序代码: // atletas.sort((o1, o2) -> o2.getFcm() - o1.getFcm()); adapter.notifyDataSetChanged(); Toast.makeText(getBaseContext(), a.toString(), Toast.LENGTH_LONG).show(); }
步骤3:无需修改AtletaAdapter代码
排序逻辑直接修改了数据源atletas的顺序,适配器会按照修改后的顺序渲染列表,不需要额外调整。
内容的提问来源于stack exchange,提问作者Davi Grulke
相关产品推荐
相关产品推荐

