diff --git a/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Issue15305.xaml b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Issue15305.xaml
new file mode 100644
index 00000000000..048e31f2763
--- /dev/null
+++ b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Issue15305.xaml
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Issue15305.xaml.cs b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Issue15305.xaml.cs
new file mode 100644
index 00000000000..8c3f1367d8a
--- /dev/null
+++ b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Issue15305.xaml.cs
@@ -0,0 +1,47 @@
+using System.Collections.ObjectModel;
+using Xamarin.Forms.CustomAttributes;
+using Xamarin.Forms.Internals;
+using Xamarin.Forms.Xaml;
+
+#if UITEST
+using Xamarin.Forms.Core.UITests;
+using Xamarin.UITest;
+using NUnit.Framework;
+#endif
+
+namespace Xamarin.Forms.Controls.Issues
+{
+#if UITEST
+ [Category(UITestCategories.ManualReview)]
+#endif
+#if APP
+ [XamlCompilation(XamlCompilationOptions.Compile)]
+#endif
+ [Preserve(AllMembers = true)]
+ [Issue(IssueTracker.Github, 15305, "[Android] TalkBack always considers ListView's header and footer for indexing/counting", PlatformAffected.Android)]
+ public partial class Issue15305 : TestContentPage
+ {
+ public Issue15305()
+ {
+#if APP
+ InitializeComponent();
+#endif
+ }
+
+ protected override void Init()
+ {
+ BindingContext = new ViewModelIssue15305();
+ }
+ }
+
+ [Preserve(AllMembers = true)]
+ public class ViewModelIssue15305
+ {
+ public ViewModelIssue15305()
+ {
+ Items = new ObservableCollection() { "first item", "second item", };
+ }
+
+ public ObservableCollection Items { get; }
+ }
+}
\ No newline at end of file
diff --git a/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Xamarin.Forms.Controls.Issues.Shared.projitems b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Xamarin.Forms.Controls.Issues.Shared.projitems
index 7e7af9cb4de..1135b9fd051 100644
--- a/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Xamarin.Forms.Controls.Issues.Shared.projitems
+++ b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Xamarin.Forms.Controls.Issues.Shared.projitems
@@ -1864,6 +1864,9 @@
+
+ Issue15305.xaml
+
MyCollectionView.xaml
Code
@@ -2417,6 +2420,9 @@
MSBuild:UpdateDesignTimeXaml
+
+ MSBuild:UpdateDesignTimeXaml
+
Designer
MSBuild:UpdateDesignTimeXaml
diff --git a/Xamarin.Forms.Platform.Android/CellAdapter.cs b/Xamarin.Forms.Platform.Android/CellAdapter.cs
index 1355f758de1..a8801256ee3 100644
--- a/Xamarin.Forms.Platform.Android/CellAdapter.cs
+++ b/Xamarin.Forms.Platform.Android/CellAdapter.cs
@@ -132,13 +132,12 @@ bool AActionMode.ICallback.OnPrepareActionMode(AActionMode mode, IMenu menu)
public void OnItemClick(AdapterView parent, AView view, int position, long id)
{
+ var listView = parent as AListView;
+ if (listView != null)
+ position -= listView.HeaderViewsCount;
+
if (_actionMode != null || _supportActionMode != null)
- {
- var listView = parent as AListView;
- if (listView != null)
- position -= listView.HeaderViewsCount;
HandleContextMode(view, position);
- }
else
HandleItemClick(parent, view, position, id);
}
diff --git a/Xamarin.Forms.Platform.Android/Renderers/ListViewAdapter.cs b/Xamarin.Forms.Platform.Android/Renderers/ListViewAdapter.cs
index 26c2cc2ef73..2173ce4dc74 100644
--- a/Xamarin.Forms.Platform.Android/Renderers/ListViewAdapter.cs
+++ b/Xamarin.Forms.Platform.Android/Renderers/ListViewAdapter.cs
@@ -481,9 +481,6 @@ protected override void HandleItemClick(AdapterView parent, AView view, int posi
cell = (Cell)(cellOwner as INativeElementView)?.Element;
}
- // All our ListView's have called AddHeaderView. This effectively becomes index 0, so our index 0 is index 1 to the listView.
- position--;
-
if (position < 0 || position >= Count)
return;
diff --git a/Xamarin.Forms.Platform.Android/Renderers/ListViewRenderer.cs b/Xamarin.Forms.Platform.Android/Renderers/ListViewRenderer.cs
index 2bad29eb08e..6992abadd5b 100644
--- a/Xamarin.Forms.Platform.Android/Renderers/ListViewRenderer.cs
+++ b/Xamarin.Forms.Platform.Android/Renderers/ListViewRenderer.cs
@@ -365,7 +365,14 @@ void UpdateFooter()
}
if (footer == null)
+ {
+ if (_footerView.ChildCount == 0)
+ {
+ AListView nativeListView = Control;
+ nativeListView.RemoveFooterView(_adapter.FooterView);
+ }
return;
+ }
if (_footerRenderer != null)
_footerRenderer.SetElement(footer);
@@ -397,7 +404,14 @@ void UpdateHeader()
}
if (header == null)
+ {
+ if (_headerView.ChildCount == 0)
+ {
+ AListView nativeListView = Control;
+ nativeListView.RemoveHeaderView(_adapter.HeaderView);
+ }
return;
+ }
if (_headerRenderer != null)
_headerRenderer.SetElement(header);