我有一个变量row_height(2自定义itemRenderer:头30像素,接触60像素)的火花表,在滚动后唯一的第一个方向变化,改变索引在视图中。Flex:Spark List在视图中的取向变化在方向变化上的变化
我试图将Header设置为60像素高度,并且我对方向更改没有任何问题。
我没有在任何地方设置verticalScrollPosition。在视口列表中添加事件侦听器并观看verticalScrollPosition,它在方向更改时不会更改。
我真的不知道我该如何解决这个问题。
编辑: 这是相对的代码清单:
<fx:Script>
protected function creationCompleteHandler(event:FlexEvent):void
{
addressBookViewModel = ViewModelFactory.getInstance().getAddressBookViewModel();
addressBookViewModel.getUserContacts(onDataReceived);
}
protected function pagedContactsList_initializeHandler(event:FlexEvent):void
{
asyncListView.list = pagedContactsList;
}
private function onDataReceived():void
{
pagedContactsList.length = (BusinessContext.getInstance().getTotalContacts() + BusinessContext.getInstance().getTotalLastNames());
loadPagedData();
}
private function createPendingItemFunctionHandler(index:int, ipe:ItemPendingError):Object
{
if(!addressBookViewModel.pageUp)
{
addressBookViewModel.pageUp = true;
addressBookViewModel.currentPage++;
addressBookViewModel.getMoreUserContacts(onMoreDataRecieved, onMoreDataMissing);
}
return loadingDataHeader;
}
private function onMoreDataRecieved():void
{
loadPagedData();
}
private function loadPagedData():void
{
for(var i:int = 0; i < addressBookViewModel.contacts.length; i++)
{
pagedContactsList.setItemAt(addressBookViewModel.contacts.getItemAt(i), pagedContactsList.lastItemInsertedIndex);
pagedContactsList.lastItemInsertedIndex++;
}
addressBookViewModel.pageUp = false;
}
internal var headerItemRender:ClassFactory = new ClassFactory(HeaderItemRenderer);
internal var contactItemRenderer:ClassFactory = new ClassFactory(ContactItemRenderer);
private function rendererFunction(item:Object):ClassFactory
{
return item.hasOwnProperty("isHeader") ? headerItemRender : contactItemRenderer;
}
</fx:Script>
<fx:Declarations>
<custom:PagedArrayList id="pagedContactsList" initialize="pagedContactsList_initializeHandler(event)"/>
</fx:Declarations>
<s:List id="list" width="100%"
height="100%" itemRendererFunction="rendererFunction" change="list1_changeHandler(event)">
<s:AsyncListView id="asyncListView" createPendingItemFunction="createPendingItemFunctionHandler" />
</s:List>
好奇的是,前后方向更改后的list.scroller.viewport.verticalScrollPosition具有相同的值,即使名单已经滚动〜40行。 (40是页面大小)。
我的应用程序中有很多列表,并且每个具有const row_height的列表都没有问题,但带有变量row_height的2有这个问题。也许这是由AsyncListView引起的。
编辑2:
我删除了AsyncListView,直接结合addressBookViewModel.contacts到List.dataProvider被,除去分页和问题仍然存在。
编辑3:
我认为,唯一可以做的事情是把断点到处都在滚轮的类。
编辑4:
这个问题滚动到列表的底部的时候才会发生。
编辑5:
找到问题! VerticalLayout.as,在updateDisplayListVirtual(行1797)中,存在对使用typicalLayoutElement设置LinearLayoutVector的方法(updateLLV)的调用。这是懒惰的初始化,第一个itemRenderer添加到列表的dataGroup中。在我的情况下,它是HeaderItemRenderer(30px)。
在updateLLV之后,通过调用LinearLayoutVector上的indexOf并传递verticalScrollPosition来设置startIndex(第一个可见项的索引)。 (简要地:verticalScrollPosition/typicalLayoutElement.height)
问题是无处不在考虑变量RowHeight!
我从来没有在我们的任何移动应用中发现过这个问题。它是否在一个简单的测试案例中进行(您可以发布)? – drkstr1
我已经添加了相对于列表的代码。 – Christopher