diff --git a/src/Controls/src/Core/Handlers/Items/Android/Adapters/SelectableItemsViewAdapter.cs b/src/Controls/src/Core/Handlers/Items/Android/Adapters/SelectableItemsViewAdapter.cs
index e01307722606..1841d2d82900 100644
--- a/src/Controls/src/Core/Handlers/Items/Android/Adapters/SelectableItemsViewAdapter.cs
+++ b/src/Controls/src/Core/Handlers/Items/Android/Adapters/SelectableItemsViewAdapter.cs
@@ -123,7 +123,10 @@ bool PositionIsSelected(int position)
void SelectableClicked(object sender, int adapterPosition)
{
- UpdateMauiSelection(adapterPosition);
+ if (adapterPosition >= 0 && adapterPosition < ItemsSource?.Count)
+ {
+ UpdateMauiSelection(adapterPosition);
+ }
}
void UpdateMauiSelection(int adapterPosition)
diff --git a/src/Controls/tests/TestCases.HostApp/Issues/Issue22674.xaml b/src/Controls/tests/TestCases.HostApp/Issues/Issue22674.xaml
new file mode 100644
index 000000000000..943db1148138
--- /dev/null
+++ b/src/Controls/tests/TestCases.HostApp/Issues/Issue22674.xaml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/Controls/tests/TestCases.HostApp/Issues/Issue22674.xaml.cs b/src/Controls/tests/TestCases.HostApp/Issues/Issue22674.xaml.cs
new file mode 100644
index 000000000000..57fb42110218
--- /dev/null
+++ b/src/Controls/tests/TestCases.HostApp/Issues/Issue22674.xaml.cs
@@ -0,0 +1,28 @@
+using System.Collections.ObjectModel;
+using Microsoft.Maui.Controls;
+using Microsoft.Maui.Controls.Xaml;
+
+namespace Maui.Controls.Sample.Issues
+{
+ [XamlCompilation(XamlCompilationOptions.Compile)]
+ [Issue(IssueTracker.Github, 22674, "Crash when quickly clicking to delete item", PlatformAffected.iOS)]
+ public partial class Issue22674 : ContentPage
+ {
+ public Issue22674()
+ {
+ InitializeComponent();
+
+ BindingContext = this;
+ }
+
+ public ObservableCollection ItemList { get; } = ["A", "B", "C", "D", "E", "F", "G", "H", "I",];
+
+ void OnCollectionViewSelectionChanged(object sender, SelectionChangedEventArgs e)
+ {
+ if (sender is CollectionView view && view.SelectedItem is string item)
+ {
+ ItemList.Remove(item);
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue22674.cs b/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue22674.cs
new file mode 100644
index 000000000000..9dfc7eefee8b
--- /dev/null
+++ b/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue22674.cs
@@ -0,0 +1,28 @@
+#if ANDROID
+using NUnit.Framework;
+using UITest.Appium;
+using UITest.Core;
+
+namespace Microsoft.Maui.TestCases.Tests.Issues;
+
+public class Issue22674 : _IssuesUITest
+{
+ public Issue22674(TestDevice device) : base(device) { }
+
+ public override string Issue => "Crash when quickly clicking to delete item";
+
+ [Test]
+ [Category(UITestCategories.CollectionView)]
+ public void RemoveItemWhenSelectionChanged()
+ {
+ App.WaitForElement("TestCollectionView");
+
+ for (int i = 0; i < 5; i++)
+ {
+ App.TapCoordinates(24, 24);
+ }
+
+ // Without crashes, the test has passed.
+ }
+}
+#endif