2

サーバーから取得しているJSONデータがいくつかあります。このデータのフィールドの 1 つは距離値です。ListView で最低から最高までの距離でデータを並べ替える必要があります。どうすればいいのかわからないのですが?

4

3 に答える 3

2

何をしたいのか正確にはわかりませんが、json 応答を受け取った後に必要な手順がいくつかあります。

  1. jsonデータをオブジェクトのリストにする
  2. リストを並べ替える
  3. ソートされたリストでリストビューのアダプターを設定する

今後の質問については、質問を別の小さいが具体的な質問に分けてください。

1.jsonデータをオブジェクトのリストにする

オブジェクト データ モデル

class YourDataModel {
       int distance;
       .....
       public int getDistance(){
              return this.distance;
       }

       public void setDistance(int distance){
              this.distance = distance;
       }
}

次に、 getJsonResponse() がリストのすべてのデータを含むjsonを返すとしましょう。そして、そのjsonリストをリストにしましょう:D

String json = getJsonResponse(); // Change that line with your code
Gson gson = new Gson();
Type listType = new TypeToken<List<YourDataModel>>(){}.getType();
ArrayList<YourDataModel> data = (ArrayList<YourDataModel>) gson.fromJson(jsonOutput, listType);

2. リストを並べ替える

それでは、いくつかの魔法を実行しましょう:D data は、アイテムを内部に含む私の配列です。

Collections.sort(data, new Comparator<YourDataModel>() {
    @Override
    public int compare(YourDataModel data1, YourDataModel data2) {
          if( data1.getDistance() < data2.getDistance() )
             return 1;
          else
             return 0;
    }
});

3. 並べ替えられたリストを持つリスト アダプターをリストビューに設定します。

ここで何を説明すればよいかわかりません:D

ListView lvData = (ListView) findViewById(R.id.listview1);
MyCustomAdapter adapter = new MyCustomAdapter(this, R.layout.listview_item_row, data);
lvData.setAdapter(adapter);

それがあなたが望むものかどうかはわかりませんが、これはそれを行う必要がある方法です。リストビューから直接データをソートしたい場合は、これを読んでください:配列アダプターでリストビューをソートする

于 2013-05-03T06:33:19.817 に答える
-1
 public void sortByLocation() {
    Collections.sort(list, new Comparator<PendingJobInfo>() {
        @Override
        public int compare(PendingJobInfo lhs, PendingJobInfo rhs) {
            // TODO Auto-generated method stub

            Double f1 = lhs.getDistance();
            Double f2 = rhs.getDistance();
            return f1.compareTo(f2);


        }
    });
}
于 2016-11-01T11:13:40.433 に答える