Flex 4.6自定义列表排序

时间:2012-05-12 19:21:59

标签: flex list sorting collections adobe

所以我的问题似乎很简单,但是对于上帝的爱,我无法弄明白。所以我在寻求你的帮助。我在包含商店的移动应用程序中有一个简单的列表。我想通过距地图中心的距离来缩短它们。

似乎我需要一个自定义排序功能,但我不确定必须做什么。

我正在使用

testDist.setLatLng(propertyList.selectedItem.lat,propertyList.selectedItem.lng);

dist.text=""+GeodesicCalculatorUtil.calculateGeodesicDistance(FlexGlobals.topLevelApplication.currentLatLng2,testDist,DistanceUnits.KILOMETERS)

获得商店的距离,我必须将它与下一个商店进行比较。但是我无法弄清楚如何在比较功能中做到这一点。如果有人能帮助我,我会很高兴。

1 个答案:

答案 0 :(得分:1)

由于这似乎是使用MapQuest作为其绘图系统的人们的常见问题,我提供了我的解决方案,用于按距离排序任何列表的自定义POI。这是移动应用程序的解决方案,这就是我在数据网格上使用列表的原因。

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


            }