Android的:如何排序数据的ListView? [英] Android: How to sort data for ListView?

查看:147
本文介绍了Android的:如何排序数据的ListView?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一些JSON数据,我从一台服务器拉下。一个在此数据字段是一个距离值。我需要有数据按距离排序从低到高在ListView。我不知道如何去这样做呢?

任何帮助AP preciated。

这是我的code来获取数据不知道如何得到它的排序是否正确?

  //哈希映射为的ListView
ArrayList的< HashMap的<字符串,字符串>> bathroomList =新的ArrayList< HashMap的<字符串,字符串>>();


@覆盖
公共无效的onCreate(包savedInstanceState){
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
    的setContentView(R.layout.activity_search);
    。getWindow()setFeatureInt(Window.FEATURE_CUSTOM_TITLE,R.layout.window_title);

    //创建JSON解析器实例
    JSONParser jParser =新JSONParser();

    //从URL获取JSON字符串
    JSONObject的JSON = jParser.getJSONFromUrl(URL);

    尝试 {
        //获取联系人的数组
        浴室= json.getJSONArray(TAG_BATHROOMS);

        //遍历所有联系人
        的for(int i = 0; I< bathrooms.length();我++){
            JSONObject的C = bathrooms.getJSONObject(我);


            //保存在变量中的每个JSON项目
            字符串ID = c.getString(TAG_ID);
            串访问= c.getString(TAG_ACCESS);
            字符串的城市= c.getString(TAG_CITY);
            字符串注释= c.getString(TAG_COMMENT);
            字符串方向= c.getString(TAG_DIRECTIONS);
            字符串名称= c.getString(TAG_NAME);
            串街道= c.getString(TAG_STREET);
            字符串bathroomtype = c.getString(TAG_BATHROOMTYPE);
            字符串距离= c.getString(TAG_DISTANCE);
            字符串distanceTrimmed = distance.substring(0,4)++英里远;
            串果= c.getString(TAG_AVAIL);
            字符串全国= c.getString(TAG_COUNTRY);
            字符串状态= c.getString(TAG_STATE);
            字符串邮政= c.getString(TAG_POSTAL);

            //System.out.println(name);

            //创建新的HashMap
            HashMap的<字符串,字符串>图=新的HashMap<字符串,字符串>();

            //添加每个子节点HashMap中的key =>值
            map.put(tag_id,分别编号);
            map.put(TAG_ACCESS,访问);
            map.put(TAG_CITY,市);
            map.put(TAG_COMMENT,评论);
            map.put(TAG_DIRECTIONS,方向);
            map.put(TAG_NAME,姓名);
            map.put(TAG_STREET,街道);
            map.put(TAG_BATHROOMTYPE,bathroomtype);
            map.put(TAG_DISTANCE,distanceTrimmed);
            map.put(TAG_AVAIL,无济于事);
            map.put(TAG_COUNTRY,国家);
            map.put(TAG_STATE,状态);
            map.put(TAG_POSTAL,邮政);

            //添加HashList到ArrayList中
            bathroomList.add(图)
        }
    }赶上(JSONException E){
        e.printStackTrace();
    }


    / **
     *更新解析JSON数据到ListView控件
     * * /

    ListAdapter适配器=新SimpleAdapter(这一点,bathroomList,
            R.layout.list_item,
            新的String [] {tag_id,分别TAG_NAME,TAG_STREET,TAG_CITY,TAG_STATE,TAG_POSTAL,TAG_COUNTRY,TAG_DISTANCE,TAG_DIRECTIONS,TAG_COMMENT,TAG_AVAIL,TAG_BATHROOMTYPE,TAG_ACCESS},新的INT [] {
                     R.id.key,R.id.name,R.id.street,R.id.city,R.id.state,R.id.postal,R.id.country,R.id.distance,R。 id.directions,R.id.comments,R.id.availability,R.id.bathroomtype,R.id.access});

    setListAdapter(适配器);
 

解决方案

使用排序列表<一href="http://docs.oracle.com/javase/7/docs/api/java/util/Collections.html#sort%28java.util.List,%20java.util.Comparator%29"相对=nofollow> Col​​lections.sort()用自定义的比较。

  Col​​lections.sort(bathroomList,新的比较&LT; HashMap的&LT;字符串,字符串&GT;&GT;()
{
    @覆盖
    公众诠释比较(HashMap的&LT;字符串,字符串&gt;将一个HashMap&LT;字符串,字符串&GT; B)
    {
        返回a.get(TAG_DISTANCE).compareTo(b.get(TAG_DISTANCE));
    }
});
 

I have some JSON data I am pulling down from a server. One of the fields in this data is a distance value. I need to have the data sorted by distance from lowest to highest in the ListView. I am not sure how to go about doing this?

Any help appreciated.

This is my code to grab the data not sure how to get it sorted properly?

// Hashmap for ListView
ArrayList<HashMap<String, String>> bathroomList = new ArrayList<HashMap<String, String>>();


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState); 
    requestWindowFeature(Window.FEATURE_CUSTOM_TITLE); 
    setContentView(R.layout.activity_search);
    getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.window_title);

    // Creating JSON Parser instance
    JSONParser jParser = new JSONParser();

    // getting JSON string from URL
    JSONObject json = jParser.getJSONFromUrl(url);

    try {
        // Getting Array of Contacts
        bathrooms = json.getJSONArray(TAG_BATHROOMS);

        // looping through All Contacts
        for(int i = 0; i < bathrooms.length(); i++){
            JSONObject c = bathrooms.getJSONObject(i);


            // Storing each json item in variable
            String id = c.getString(TAG_ID);
            String access = c.getString(TAG_ACCESS);
            String city = c.getString(TAG_CITY);
            String comment = c.getString(TAG_COMMENT);
            String directions = c.getString(TAG_DIRECTIONS);
            String name = c.getString(TAG_NAME);
            String street = c.getString(TAG_STREET);
            String bathroomtype = c.getString(TAG_BATHROOMTYPE);                
            String distance = c.getString(TAG_DISTANCE);
            String distanceTrimmed = distance.substring(0,4) + " " + "miles away";
            String avail = c.getString(TAG_AVAIL);
            String country = c.getString(TAG_COUNTRY);
            String state = c.getString(TAG_STATE);
            String postal = c.getString(TAG_POSTAL);

            //System.out.println(name);

            // creating new HashMap
            HashMap<String, String> map = new HashMap<String, String>();

            // adding each child node to HashMap key => value
            map.put(TAG_ID, id);
            map.put(TAG_ACCESS, access);
            map.put(TAG_CITY, city);
            map.put(TAG_COMMENT, comment);
            map.put(TAG_DIRECTIONS, directions);
            map.put(TAG_NAME, name);
            map.put(TAG_STREET, street);
            map.put(TAG_BATHROOMTYPE, bathroomtype);
            map.put(TAG_DISTANCE, distanceTrimmed);
            map.put(TAG_AVAIL, avail);
            map.put(TAG_COUNTRY, country);
            map.put(TAG_STATE, state);
            map.put(TAG_POSTAL, postal);

            // adding HashList to ArrayList
            bathroomList.add(map);
        }
    } catch (JSONException e) {
        e.printStackTrace();
    }


    /**
     * Updating parsed JSON data into ListView
     * */

    ListAdapter adapter = new SimpleAdapter(this, bathroomList,
            R.layout.list_item,
            new String[] { TAG_ID, TAG_NAME, TAG_STREET, TAG_CITY, TAG_STATE, TAG_POSTAL,TAG_COUNTRY, TAG_DISTANCE, TAG_DIRECTIONS, TAG_COMMENT, TAG_AVAIL, TAG_BATHROOMTYPE, TAG_ACCESS}, new int[] {
                     R.id.key,R.id.name, R.id.street, R.id.city, R.id.state, R.id.postal,R.id.country, R.id.distance, R.id.directions, R.id.comments, R.id.availability, R.id.bathroomtype, R.id.access });

    setListAdapter(adapter);

解决方案

Sort the list using Collections.sort() with a custom comparator.

Collections.sort(bathroomList, new Comparator<HashMap<String, String>>()
{
    @Override
    public int compare(HashMap<String, String> a, HashMap<String, String> b)
    {
        return a.get(TAG_DISTANCE).compareTo(b.get(TAG_DISTANCE));
    }
});

这篇关于Android的:如何排序数据的ListView?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆