Android的:如何排序数据的ListView? [英] Android: How to sort data for 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> Collections.sort()
用自定义的比较。
Collections.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屋!