Skip to content
This repository has been archived by the owner on May 1, 2024. It is now read-only.

[Tizen] Fix several CollectionView issue on Tizen #13661

Merged
merged 5 commits into from
Feb 8, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,8 @@ public class CollectionView : EBox, ICollectionViewController, IRotaryInteractio
EvasObject _headerView;
EvasObject _footerView;
SmartEvent _scrollAnimationStop;
SmartEvent _scrollAnimationStart;
bool _isScrollAnimationStarted;

public event EventHandler<ItemsViewScrolledEventArgs> Scrolled;

Expand All @@ -43,6 +45,10 @@ public CollectionView(EvasObject parent) : base(parent)
Scroller.Show();
PackEnd(Scroller);
Scroller.Scrolled += OnScrolled;

_scrollAnimationStart = new SmartEvent(Scroller, ThemeConstants.Scroller.Signals.StartScrollAnimation);
_scrollAnimationStart.On += OnScrollStarted;

_scrollAnimationStop = new SmartEvent(Scroller, ThemeConstants.Scroller.Signals.StopScrollAnimation);
_scrollAnimationStop.On += OnScrollStopped;

Expand Down Expand Up @@ -227,6 +233,11 @@ public void ScrollTo(object item, ScrollToPosition position = ScrollToPosition.M

public void ItemMeasureInvalidated(int index)
{
// If a first item size was updated, need to reset _itemSize
if (index == 0)
{
_itemSize = new ESize(-1, -1);
}
LayoutManager?.ItemMeasureInvalidated(index);
}

Expand Down Expand Up @@ -594,6 +605,7 @@ void OnLayout()
Scroller.HorizontalStepSize = _layoutManager.GetScrollBlockSize();
Scroller.VerticalStepSize = _layoutManager.GetScrollBlockSize();
UpdateSnapPointsType(SnapPointsType);
Device.BeginInvokeOnMainThread(SendScrolledEvent);
}
}

Expand Down Expand Up @@ -629,7 +641,27 @@ void OnInnerLayout()
int _previousHorizontalOffset = 0;
int _previousVerticalOffset = 0;

void OnScrollStarted(object sender, EventArgs e)
{
_isScrollAnimationStarted = true;
}

void OnScrollStopped(object sender, EventArgs e)
{
SendScrolledEvent();
_isScrollAnimationStarted = false;
}

void OnScrolled(object sender, EventArgs e)
{
_layoutManager.LayoutItems(ViewPort);
if (!_isScrollAnimationStarted)
{
SendScrolledEvent();
}
}

void SendScrolledEvent()
{
var args = new ItemsViewScrolledEventArgs();
args.FirstVisibleItemIndex = _layoutManager.GetVisibleItemIndex(ViewPort.X, ViewPort.Y);
Expand All @@ -646,11 +678,6 @@ void OnScrollStopped(object sender, EventArgs e)
_previousVerticalOffset = ViewPort.Y;
}

void OnScrolled(object sender, EventArgs e)
{
_layoutManager.LayoutItems(ViewPort);
}

void UpdateSnapPointsType(SnapPointsType snapPoints)
{
if (LayoutManager == null)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -178,6 +178,7 @@ public void LayoutItems(ERect bound, bool force)
{
return;
}

_isLayouting = true;
_last = bound;

Expand Down Expand Up @@ -382,14 +383,21 @@ public void ItemSourceUpdated()

public void ItemMeasureInvalidated(int index)
{
if (_realizedItem.ContainsKey(index))
{
CollectionView.RequestLayoutItems();
}
if (_hasUnevenRows)
{
if (_cached.Count > index)
_cached[index] = false;

if (_realizedItem.ContainsKey(index))
{
CollectionView.RequestLayoutItems();
}
}
else if (index == 0) // MeasureFirstItem
{
// Reset item size to measure updated size
InitializeMeasureCache();
CollectionView.RequestLayoutItems();
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -252,6 +252,10 @@ protected virtual View CreateHeaderView()
header = structuredItemsView.HeaderTemplate.CreateContent() as View;
header.BindingContext = structuredItemsView.Header;
}
else if (structuredItemsView.Header is String str)
{
header = new XLabel { Text = str, };
}
return header;
}
}
Expand All @@ -274,6 +278,10 @@ protected virtual View CreateFooterView()
footer = structuredItemsView.FooterTemplate.CreateContent() as View;
footer.BindingContext = structuredItemsView.Footer;
}
else if (structuredItemsView.Footer is String str)
{
footer = new XLabel { Text = str, };
}
return footer;
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -322,14 +322,21 @@ public void ItemSourceUpdated()

public void ItemMeasureInvalidated(int index)
{
if (_realizedItem.ContainsKey(index))
{
CollectionView.RequestLayoutItems();
}
if (_hasUnevenRows)
{
if (_cached.Count > index)
_cached[index] = false;

if (_realizedItem.ContainsKey(index))
{
CollectionView.RequestLayoutItems();
}
}
else if (index == 0)
{
// Reset item size to measure updated size
InitializeMeasureCache();
CollectionView.RequestLayoutItems();
}
}

Expand Down