【问题标题】:ListView Sorting in AndroidAndroid中的ListView排序
【发布时间】:2014-03-30 11:10:44
【问题描述】:

我正在绑定来自JSONArrayListView。其中有一个字符串距离。我只希望具有最小距离的列表项必须作为ListView 中的第一项出现,并且在最后一个列表项中具有最大距离。这是我的适配器。

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;

   }
 }

提前致谢

【问题讨论】:

  • Long.valueOf(String s).longValue();到一个列表然后对其进行排序?

标签: android sorting android-listview baseadapter android-json


【解决方案1】:

试试:

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

还没有测试过,但我认为它应该可以工作。

【讨论】:

  • 你应该用这个替换构造函数并完成导入,它应该可以工作。你还想让我补充什么?
  • 谢谢...让我检查一下
  • 如何在构造函数中获取事件 HashMap,因为那里没有指定位置
【解决方案2】:

您可以使用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,它提供了一个很好的教程,用于通过使用 ComparatorComparable 的示例对 Java 对象进行排序。

希望这会有所帮助:)

【讨论】:

    【解决方案3】:

    所以基本上你的适配器数据集是一个 hashMap。 hashmap 必须排序,但正如类的定义所说的那样

    这个类不保证地图的顺序;在 特别是,它不保证订单将保持不变 随着时间的推移。

    我们将改用地图。

    我已经更改了你的代码和类型请使用这个。

    public class NearByDockITAdapter extends BaseAdapter {
    
            private Activity activity;
            private ArrayList<Map<String, String>> data;
            private static LayoutInflater inflater = null;
            int loader;
    
            public NearByDockITAdapter(Activity a, ArrayList<HashMap<String, String>> d) {
                activity = a;
    
                data = new ArrayList<Map<String,String>>();
                for (Iterator<HashMap<String, String>> iterator = d.iterator(); iterator.hasNext();) {
                    Map<String, String> map = sortByValues(iterator.next());
                    data.add(map);
                }
    
                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;
    
            }
        }
    
        public static <K extends Comparable, V extends Comparable> Map<K, V> sortByValues(Map<K, V> map) {
            List<Map.Entry<K, V>> entries = new LinkedList<Map.Entry<K, V>>(map.entrySet());
    
            Collections.sort(entries, new Comparator<Map.Entry<K, V>>() {
    
                @Override
                public int compare(Entry<K, V> o1, Entry<K, V> o2) {
                    return o1.getValue().compareTo(o2.getValue());
                }
            });
    
            Map<K, V> sortedMap = new LinkedHashMap<K, V>();
    
            for (Map.Entry<K, V> entry : entries) {
                sortedMap.put(entry.getKey(), entry.getValue());
            }
    
            return sortedMap;
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多