如何根据特定的列表视图项对列表视图进行排序

时间:2016-07-21 11:37:28

标签: android listview

我基本上是在一个应用程序中显示靠近用户所在位置的各种食品店。

我已成功整合谷歌地图,但我无法根据最近的用户位置过滤我的列表视图项目。

例如,我有一个列表视图项

  

地点

,其值为

  

place1,place2,place3,place4等等

我希望如果用户位置靠近'Place 1',那么用户应首先显示Place 1的食物项目,然后放置2,3和4。

所以我想根据特定的列表视图项(PLACE)对列表视图进行排序,并将其与用户位置进行比较,并显示靠近用户的结果。

我不知道这样做。 提前致谢。

2 个答案:

答案 0 :(得分:0)

取适配器中的项目并对其进行排序。也许你需要为它扩展标准的ArrayAdapter。不要忘记在排序后调用Adapter.notifyDataSetChanged()。

答案 1 :(得分:0)

您可以考虑将所有数据存储在二维ArrayList中,这样您的一个列就会“放置”。然后使用下面的代码对其进行排序,然后将其传递给适配器。

ArrayList<ArrayList<String>> yourData = new ArrayList<ArrayList<String>>();
yourData = /* initialize your data */ ;

Collections.sort(yourData, new Comparator<ArrayList<String>>() {
    @Override
    public int compare(ArrayList<String> row1, ArrayList<String> row2) {
        return row1.get(0).compareTo(row2.get(0));  // "at 0 index your place
    }
});

<强>更新

您可以在每个餐厅的“地点”栏中存储经度和格值。然后,当您获得用户的当前位置时,您可以启动一些计算用户和餐馆之间距离的方法。该方法可能如下所示:

float [] distResult = new float[1];
Location.distanceBetween(latA, lonA, latB, lonB, distResult);
float dist = distResult[0];

将这些计算值存储在单独的列中。完成所有计算后,您可以调用该排序方法,该方法将根据包含用户当前位置与餐馆之间距离的列对项目进行排序。

有关计算距离的更多信息,请参阅this