Java 如何在android中按总体对listview项进行排序

Java 如何在android中按总体对listview项进行排序,java,android,Java,Android,这是我的活动课 public class MainActivity extends Activity { // Declare Variables ListView list; ListViewAdapter adapter; EditText editsearch; String[] rank; String[] country; String[] population; ArrayList<WorldPopu

这是我的活动

    public class MainActivity extends Activity   {

    // Declare Variables
    ListView list;
    ListViewAdapter adapter;
    EditText editsearch;
    String[] rank;
    String[] country;
    String[] population;
    ArrayList<WorldPopulation> arraylist = new ArrayList<WorldPopulation>();

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.listview_main);

        // Generate sample data
        rank = new String[] { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10" };

        country = new String[] { "China", "India", "United States",
                "Indonesia", "Brazil", "Pakistan", "Nigeria", "Bangladesh",
                "Russia", "Japan" };

        population = new String[] { "1,354,040,000", "1,210,193,422",
                "315,761,000", "237,641,326", "193,946,886", "182,912,000",
                "170,901,000", "152,518,015", "143,369,806", "127,360,000" };

        // Locate the ListView in listview_main.xml
        list = (ListView) findViewById(R.id.listview);

        for (int i = 0; i < rank.length; i++) 
        {
            WorldPopulation wp = new WorldPopulation(rank[i], country[i],
                    population[i]);
            // Binds all strings into an array
            arraylist.add(wp);
        }

        // Pass results to ListViewAdapter Class
        adapter = new ListViewAdapter(this, arraylist);

        // Binds the Adapter to the ListView
        list.setAdapter(adapter);


    }

}

我正在用排名打印Listview中的数据,国家和人口,但我无法根据人口进行排序,目前它按排名显示,而我必须按升序打印人口数据,这意味着小人口将优先于大人口,请分别提供帮助。

这是因为您已将人口声明为字符串。
尝试长数据类型。

制作一个可以比较对象的比较器,或者如果它们都是同一类的实例,则可以使该类实现可比较。然后可以使用Collections.sort()进行实际排序

请检查下面的代码,这些不是根据您的需要调整的,但您可以参考。为什么不把数据保存在arraylist而不是array中呢

ArrayList arrayList = new ArrayList();

//Add elements to Arraylist
arrayList.add("1");
arrayList.add("3");
arrayList.add("5");
arrayList.add("2");
arrayList.add("4");


Collections.sort(arrayList);

//display elements of ArrayList
System.out.println("ArrayList elements after sorting in ascending order : ");
for(int i=0; i<arrayList.size(); i++)
    System.out.println(arrayList.get(i));

按照以下代码对任何ArrayList进行排序

 Collections.sort(empList, new Comparator<WorldPopulation>(){
 public int compare(WorldPopulation wp1, WorldPopulation wp2) {
 return emp1.getFirstName().compareToIgnoreCase(emp2.getFirstName());
}
});
Collections.sort(empList,newcomparator(){
公共整数比较(世界人口wp1、世界人口wp2){
返回emp1.getFirstName().CompareTIgnoreCase(emp2.getFirstName());
}
});
然后通知适配器数据集已更改
notifyDataSetChanged()

这是比较器的一个简单示例。在设置适配器之前和调用适配器构造函数之后,您将在主类中调用它。在您的例子中,因为填充是一个字符串,所以在比较器中,您必须将其转换为int以应用排序。你必须为逗号做点什么。根据您的要求修改blow代码

 adapter.sort(new Comparator< WorldPopulation >() {
        @Override
        public int compare(WorldPopulation lhs, WorldPopulation rhs) {
            return Integer.parseInt(lhr.getgetPopulation())-Integer.parseInt(rhs.getPopulation());   //or whatever your sorting algorithm
        }
    });
adapter.sort(新的比较器(){
@凌驾
公共整数比较(世界人口lhs、世界人口rhs){
返回Integer.parseInt(lhr.getPopulation())-Integer.parseInt(rhs.getPopulation());//或任何排序算法
}
});


您是否看到comparatori尝试了Collection.sort和Put arraylist,但它不起作用您能否发布您的代码您尝试对arraylist排序的是哪一个???Collections.sort(list);我将解析,但当我使用Collection.Sort and Puted arraylist时,它没有排序,但仍然没有排序您想短按一些按钮单击否我只想在应用程序启动时查看population我想按升序将最小值排序到最大值而不需要短按字符串数组(填充)请使用arraylist从集合中排序。sort()请在我的回答中检查上述更新请给出变量声明的完整代码快照或使用新编辑的代码更新您的问题我不确定,但我认为您没有通过.add()向arraylist变量添加数据,请查看sort()仅适用于收集数据,如果我是对的,请阅读Arraylist教程。收集是为了完成您正在寻找的工作类型。yaar我的数据正在Listview中打印您怎么能说项目没有添加到ArrayList中仍然它在排序方法中不工作错误没有带适配器的排序方法Post您的适配器类排序方法可用于所有适配器,你做错了什么。你做错了什么,我已经用了很多次适配器排序。当adpter时,它没有显示排序方法。未找到sor方法
IgnoreCaseComparator icc = new IgnoreCaseComparator();

java.util.Collections.sort(arrayList,icc);
 Collections.sort(empList, new Comparator<WorldPopulation>(){
 public int compare(WorldPopulation wp1, WorldPopulation wp2) {
 return emp1.getFirstName().compareToIgnoreCase(emp2.getFirstName());
}
});
 adapter.sort(new Comparator< WorldPopulation >() {
        @Override
        public int compare(WorldPopulation lhs, WorldPopulation rhs) {
            return Integer.parseInt(lhr.getgetPopulation())-Integer.parseInt(rhs.getPopulation());   //or whatever your sorting algorithm
        }
    });