我有一個變量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