Skip to content

Commit 9e6da5d

Browse files
Used Math.Clamp instead of Math.Max to ensure that visible item indices stay within the valid range.
1 parent 4dcd651 commit 9e6da5d

2 files changed

Lines changed: 8 additions & 2 deletions

File tree

src/Controls/src/Core/Handlers/Items/Android/RecyclerViewScrollListener.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -116,8 +116,10 @@ protected virtual (int First, int Center, int Last) GetVisibleItemsIndex(Recycle
116116
centerItemIndex--;
117117
}
118118

119-
firstVisibleItemIndex = Math.Max(0, firstVisibleItemIndex);
120-
lastVisibleItemIndex = Math.Max(0, lastVisibleItemIndex);
119+
int maxValidIndex = Math.Max(0, itemsSource.Count - 1);
120+
firstVisibleItemIndex = Math.Clamp(firstVisibleItemIndex, 0, maxValidIndex);
121+
lastVisibleItemIndex = Math.Clamp(lastVisibleItemIndex, 0, maxValidIndex);
122+
centerItemIndex = Math.Clamp(centerItemIndex, 0, maxValidIndex);
121123

122124
return (firstVisibleItemIndex, centerItemIndex, lastVisibleItemIndex);
123125
}

src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue17664.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,10 @@ public void VerifyGroupedCollectionViewVisibleItemIndices()
1919
App.WaitForElement("Issue17664ScrollBtn");
2020
App.Tap("Issue17664ScrollBtn");
2121

22+
#if WINDOWS
23+
Thread.Sleep(1000);
24+
#endif
25+
2226
var resultItem = App.WaitForElement("Issue17664DescriptionLabel").GetText();
2327
Assert.That(resultItem, Is.EqualTo("Category C item #2"));
2428
}

0 commit comments

Comments
 (0)