【问题标题】:Flex 4.6 Custom Sorting of listFlex 4.6 自定义列表排序
【发布时间】:2012-05-12 19:21:58
【问题描述】:

所以我的问题似乎很简单,但看在上帝的份上,我无法弄清楚。所以我请求你的帮助。我在包含商店的移动应用程序中有一个简单的列表。我想将它们缩短到与地图中心的距离。

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

我正在使用

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

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

要获得一家商店的距离,我必须将其与下一家进行比较。但是我不知道如何在比较功能中做到这一点。如果有人可以帮助我,我会很高兴。

【问题讨论】:

  • 您的列表数据类型是什么?一个数组集合?你试图做些什么来排序它?您是否阅读过这些文档:livedocs.adobe.com/flex/3/html/…
  • 我从 php 服务获取我的数据,我列表的数据提供者从那里定义为 我使用 lat 和 lng 来获取距离我需要用于排序。
  • 看起来 AsyncListView 不像 ArrayCollection 或 XMLListCollection 那样具有任何排序功能。您可以考虑切换;或在检索数据之前在服务器端对数据进行排序。
  • 如果只使用数据库中的字段进行排序,它实际上工作得很好。我的问题是我不知道如何使用自定义函数对列表进行排序。例如,我可以使用数据库中的 lat 对列表进行排序。但是我想先做一些计算,然后再做 lat+1 。
  • 你不需要在 Flex 中对 List 类进行排序,因为它只是一个显示类。您可以根据数据类型对 List 的 dataProvider 进行排序。 ArrayCollection 或 XMLListCollection 提供了我上面链接的内置排序功能。 ASyncListView 没有。要在 Collection 类中对数据执行计算或其他处理,您可以使用 sortCompareFunction。

标签: apache-flex list sorting collections adobe


【解决方案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);


            }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-09
    • 2017-11-06
    • 2012-08-04
    • 2011-03-02
    • 1970-01-01
    • 2021-04-02
    相关资源
    最近更新 更多