Apache flex Flex 4.6列表的自定义排序
所以我的问题似乎很简单,但看在上帝的份上,我想不出来。所以我请求你的帮助。我在一个包含商店的移动应用程序中有一个简单的列表。我想把它们从地图的中心缩短一段距离 似乎我需要一个自定义排序功能,但我不确定我必须在其中做什么 我正在使用Apache flex Flex 4.6列表的自定义排序,apache-flex,list,sorting,collections,adobe,Apache Flex,List,Sorting,Collections,Adobe,所以我的问题似乎很简单,但看在上帝的份上,我想不出来。所以我请求你的帮助。我在一个包含商店的移动应用程序中有一个简单的列表。我想把它们从地图的中心缩短一段距离 似乎我需要一个自定义排序功能,但我不确定我必须在其中做什么 我正在使用 testDist.setLatLng(propertyList.selectedItem.lat,propertyList.selectedItem.lng); dist.text=""+GeodesicCalculatorUtil.calculateGeodesi
testDist.setLatLng(propertyList.selectedItem.lat,propertyList.selectedItem.lng);
dist.text=""+GeodesicCalculatorUtil.calculateGeodesicDistance(FlexGlobals.topLevelApplication.currentLatLng2,testDist,DistanceUnits.KILOMETERS)
要得到一家商店的距离,我必须将它与下一家进行比较。但是,我不知道如何在比较函数中实现它。如果有人能帮助我,我将非常高兴。由于这似乎是使用MapQuest作为映射系统的人的常见问题,我提供了我的解决方案,用于根据到任何列表的距离对自定义POI进行排序。这是一个针对移动应用程序的解决方案,这也是我在datagrid上使用列表的原因
protected function sort_clickHandler():void
{
var dataSortField:SortField = new SortField();
dataSortField.numeric = true;
/* Create the Sort object and add the SortField object created earlier to the array of fields to sort on. */
var numericDataSort:Sort = new Sort();
numericDataSort.compareFunction=sortFunction;
/* Set the ArrayCollection object's sort property to our custom sort, and refresh the ArrayCollection. */
getAllMarkersResult.lastResult.sort = numericDataSort;
getAllMarkersResult.lastResult.refresh();
}
private function sortFunction(a:Object, b:Object, array:Array = null):int
{
var aPoi:LatLng = new LatLng(a.lat,a.lng);
var bPoi:LatLng = new LatLng(b.lat,b.lng);
var i:Number=GeodesicCalculatorUtil.calculateGeodesicDistance(FlexGlobals.topLevelApplication.currentLatLng2,aPoi,DistanceUnits.KILOMETERS);
var j:Number=GeodesicCalculatorUtil.calculateGeodesicDistance(FlexGlobals.topLevelApplication.currentLatLng2,bPoi,DistanceUnits.KILOMETERS);
return ObjectUtil.numericCompare(i, j);
}
对于使用MapQuest作为映射系统的人来说,这似乎是一个常见的问题,因此我提供了我的解决方案,用于根据到任何列表的距离对自定义POI进行排序。这是一个针对移动应用程序的解决方案,这也是我在datagrid上使用列表的原因
protected function sort_clickHandler():void
{
var dataSortField:SortField = new SortField();
dataSortField.numeric = true;
/* Create the Sort object and add the SortField object created earlier to the array of fields to sort on. */
var numericDataSort:Sort = new Sort();
numericDataSort.compareFunction=sortFunction;
/* Set the ArrayCollection object's sort property to our custom sort, and refresh the ArrayCollection. */
getAllMarkersResult.lastResult.sort = numericDataSort;
getAllMarkersResult.lastResult.refresh();
}
private function sortFunction(a:Object, b:Object, array:Array = null):int
{
var aPoi:LatLng = new LatLng(a.lat,a.lng);
var bPoi:LatLng = new LatLng(b.lat,b.lng);
var i:Number=GeodesicCalculatorUtil.calculateGeodesicDistance(FlexGlobals.topLevelApplication.currentLatLng2,aPoi,DistanceUnits.KILOMETERS);
var j:Number=GeodesicCalculatorUtil.calculateGeodesicDistance(FlexGlobals.topLevelApplication.currentLatLng2,bPoi,DistanceUnits.KILOMETERS);
return ObjectUtil.numericCompare(i, j);
}
列表的数据类型是什么?数组集合?你试着做些什么来分类它?你读过这些文档吗:我从php服务获取数据,我的列表的数据提供程序定义为:从这里开始,我使用lat和lng获取排序所需的距离。它不像ArrayCollection或XMLListCollection那样具有任何排序功能。你可以考虑切换;或者在检索数据之前在服务器端对数据进行排序。如果只使用数据库中的字段进行排序,实际上效果很好。我的问题是,我不知道如何使用自定义函数对列表进行排序。例如,我可以使用数据库中的lat对列表进行排序。不过,我想先做一些计算,然后再像lat+1那样做。在Flex中,您不需要对List类进行排序,因为它只是一个显示类。您可以根据列表的数据提供程序的数据类型对其进行排序。ArrayCollection或XMLListCollection提供了我上面链接的内置排序功能。ASyncListView不支持。要在集合类中对数据执行计算或其他处理,可以使用SortComparennction。列表的数据类型是什么?数组集合?你试着做些什么来分类它?你读过这些文档吗:我从php服务获取数据,我的列表的数据提供程序定义为:从这里开始,我使用lat和lng获取排序所需的距离。它不像ArrayCollection或XMLListCollection那样具有任何排序功能。你可以考虑切换;或者在检索数据之前在服务器端对数据进行排序。如果只使用数据库中的字段进行排序,实际上效果很好。我的问题是,我不知道如何使用自定义函数对列表进行排序。例如,我可以使用数据库中的lat对列表进行排序。不过,我想先做一些计算,然后再像lat+1那样做。在Flex中,您不需要对List类进行排序,因为它只是一个显示类。您可以根据列表的数据提供程序的数据类型对其进行排序。ArrayCollection或XMLListCollection提供了我上面链接的内置排序功能。ASyncListView不支持。要在集合类中对数据执行计算或其他处理,可以使用SortComparennction。