2014-02-27 47 views
1

我綁定ListViewJSONArray。它有一個字符串距離。我只是希望具有最小距離的列表項目必須作爲ListView中的第一項出現,並且在最後列表項目中具有最大距離。這是我的適配器。ListView排序在Android中

public class NearByDockITAdapter extends BaseAdapter { 

private Activity activity; 
private ArrayList<HashMap<String, String>> data; 
private static LayoutInflater inflater = null; 
int loader; 


public NearByDockITAdapter(Activity a, ArrayList<HashMap<String, String>> d) { 
activity = a; 
data = d; 
inflater = (LayoutInflater) activity 
    .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
} 

public int getCount() { 
return data.size(); 
} 

public Object getItem(int position) { 
return position; 
} 

public long getItemId(int position) { 
return position; 
} 

@SuppressLint("DefaultLocale") 
public View getView(int position, View convertView, ViewGroup parent) { 
View vi = convertView; 

if (convertView == null) 
    vi = inflater.inflate(R.layout.list_view_item_layout, null); 
    TextView addressTextView = (TextView) vi 
    .findViewById(R.id.dockitaddresstext); // Address 
HashMap<String, String> events = new HashMap<String, String>(); 
events = data.get(position); 

String distanceString = events.get(Utility.DISTANCE); 
String dis = distanceString; 
addressTextView.setText("(" + dis + ") " + addressString); 

return vi; 

    } 
} 

由於提前

+0

Long.valueOf(String s).longValue();到一個列表,然後對其進行排序? – mach

回答

2

嘗試:

public NearByDockITAdapter(Activity a, ArrayList<HashMap<String, String>> d) { 
activity = a; 
Collections.sort(d, new Comparator<HashMap<String,String>>() { 
    public int compare(HashMap<String,String> a, HashMap<String,String> b) { 
     String distanceString1 = a.get(Utility.DISTANCE); 
     String distanceString2 = b.get(Utility.DISTANCE); 
     return compareDist(distanceString1,distanceString2); 
    } 
    private int compareDist(String distanceString1,String distanceString2) { 
     int i1 = Integer.parseInt(distanceString1); 
     int i2 = Integer.parseInt(distanceString2); 
     return i1 - i2; 
    } 
}); 
data = d; 
inflater = (LayoutInflater) activity 
    .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
} 

沒有測試過,但我認爲它應該工作。

+0

你可以添加一些更多的代碼嗎? –

+0

你應該用這個替換構造函數並完成導入,它應該工作。你還想要我補充什麼? –

+0

謝謝...讓我檢查 –

1

您可以使用Comparator

下面是一個例子。

Comparator<String> StringComparator = new Comparator<String>() { 
    public int compare(String d1, String d2) { 
     Integer i1 = Integer.parseInt(d1); 
     Integer i2 = Integer.parseInt(d2); 

     // for ascending 
     return (int) Math.signum(i1.compareTo(i2)); 
     // for descending 
     // return (int) Math.signum(i1.compareTo(i2)) * -1; 
    } 
}; 

編輯:

我剛剛發現一個link它提供了一個偉大的教程進行排序的Java使用ComparatorComparable實例對象。

希望這有助於:)

0

所以基本上你的適配器數據集是一個哈希映射。散列表必須被排序,但是由於類的定義說

該類不能保證地圖的順序;在 特別是,它不能保證該訂單隨着時間的推移將保持恆定 。

我們將使用Map來代替。

我已更改您的代碼和類型請使用此。

​​