У меня есть список искры и использование ArrayCollection в качестве датаподавателя для списка. Изначально, когда список заполняется, сортировка выполняется, но мне нужно добавлять элементы в список довольно часто по мере их обновления на сервере. После того, как я добавлю элемент, мне нужно повторно отсортировать список. После применения сортировки и вызова refresh() scrollbar сбрасывает себя вверх.Сортировочный список без события распространения для сброса полосы прокрутки
Я ищу способ, чтобы добавить элементы в список и сохранить сортировку списка без сброса полосы прокрутки в верхнюю позицию.
Ранее я прочитал аналогичный вопрос, но в этом вопросе большинство пользователей сказали сохранить VerticalScrollPostion в переменной и применить это VerticalScrollPosition назад после завершения сортировки. Проблема заключается в том, что в полосе прокрутки есть рывок, так как он возвращается в начало после обновления, а затем прокручивается назад до положения в соответствии с применяемым. Таким образом, это решение невозможно, так как элементы добавляются очень часто, так как полоса прокрутки идет вверх и вниз очень часто и раздражает пользователей. Также не выглядит красивым n профессиональным
Мне нужен способ, чтобы полоса прокрутки оставалась в нем, даже после сортировки. Также я хочу продолжать использовать useVirtualLayout = true для списка.
Я также пытался расширить ArrayCollection, но не смог найти способ решить мою проблему.
Ниже приведен простой пример (извлеченный из моего основного приложения), чтобы проиллюстрировать проблему. Просто прокрутите список до конца и затем нажмите кнопку «Сортировка» (которая сортирует список), и полоса прокрутки переместится в верхнее положение. Я хочу ScrollBar, чтобы остаться на своей позиции даже после нажатия кнопки Сортировка:
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" creationComplete="application1_creationCompleteHandler(event)">
<fx:Declarations>
<!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
<fx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
import mx.collections.SortField;
import spark.collections.Sort;
[Bindable] protected var ar_c:ArrayCollection;
protected var dgArray:Array=new Array();
protected function application1_creationCompleteHandler(event:FlexEvent):void
{
for(var i:int=0;i<20;i++)
dgArray.splice(-1,0,{label:"h"+i});
ar_c= new ArrayCollection(dgArray);
}
protected function sort_list():void{
var sort:spark.collections.Sort=new Sort();
sort.fields=[new SortField("label",false,true)];
ar_c.sort=sort;
ar_c.refresh();
}
]]>
</fx:Script>
<s:List x="42" y="41" id="mylist" width="199" height="253" dataProvider="{ar_c}" useVirtualLayout="true"></s:List>
<s:Button x="295" y="40" label="Sort" click="sort_list();"/>
</s:Application>
Вы уверены, что необходимы 'refresh()' звонки? «Список» должен иметь возможность собирать добавленные элементы без повторного вызова этого метода. –
необходимо обновить вызовы, чтобы реализовать сортировку, поэтому после того, как я добавлю элемент, мне нужно сортировать, чтобы он занял нужное место. Поэтому в основном я хочу знать, как сортировать, не переустанавливая положение полосы прокрутки вверх. – user1190524
Моя точка зрения заключается в том, что 'ArrayCollection' будет сортироваться без какого-либо вызова' refresh() ', и' List' это заметит и соответствующим образом обновит. –