繁体   English   中英

如何在Android中对listview项目人口进行明智的排序

[英]how to sort listview item Population wise in android

这是我的活动

    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);


    }

}

这是我的数据模型类:

public class WorldPopulation {
    private String rank;
    private String country;
    private String population;

    public WorldPopulation(String rank, String country, String population) {
        this.rank = rank;
        this.country = country;
        this.population = population;
    }

    public String getRank() {
        return this.rank;
    }

    public String getCountry() {
        return this.country;
    }

    public String getPopulation() {
        return this.population;
    }
}

我正在按等级,国家和人口在Listview中打印数据,但是我无法按人口明智排序。目前,我必须按行显示明智的排名,而我必须按升序打印数据明智地按人口排序,这意味着小人口首先出现,然后是大人口,请分别救命。

或者创建一个可以比较您的对象的比较器,或者如果它们都是同一类的所有实例,则可以使该类实现Comparable。 然后,您可以使用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));

Collection.sort方法将按升序排序或创建custorm运算符类

import java.util.Comparator;

class IgnoreCaseComparator implements Comparator<String> {
  public int compare(String strA, String strB) {
    return strA.compareToIgnoreCase(strB);
  }
}

然后按您的排序:

IgnoreCaseComparator icc = new IgnoreCaseComparator();

java.util.Collections.sort(arrayList,icc);

这是因为您已将填充声明为字符串。 尝试使用长数据类型。

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

 Collections.sort(empList, new Comparator<WorldPopulation>(){
 public int compare(WorldPopulation wp1, WorldPopulation wp2) {
 return emp1.getFirstName().compareToIgnoreCase(emp2.getFirstName());
}
});

而不是通知适配器数据集已更改notifyDataSetChanged()

这是比较器的简单示例。 您将在设置适配器之前和调用适配器构造函数之后在主类中调用它。 在您的情况下,由于population是一个字符串,因此在比较器中,您必须将其转换为int以应用排序。 您必须为逗号付出一些。 根据您的要求修改打击代码。

 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
        }
    });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM